LoginSignup
54
49

More than 1 year has passed since last update.

未経験からOSCP取得ガイド

Last updated at Posted at 2022-03-13

はしがき

・著者は、文章を書くのが苦手です。
・この記事は、大変長く冗長になっています。
・この記事は、間違っていることを多く含んでいる可能性があります。
・この記事は、あなたの学習における大きなネタバレとなる可能性があります。
・この記事は、誤字・脱字が多いです。

記事の目的

 本記事は、当時OSCPを目指した著者と同じようなレベルの入門者がOSCP取得を目指すためのガイドとなる記事です。

記事の妥当性

 私自身は、今もなおただの事務員です。業務で診断業務やペネトレーション・Red Teamingをしたこともなければ、大規模なシステムやサーバの管理・プログラム開発をしたことはありません。よって記事の内容の妥当性には大いに疑問が残ると思います。一方で完全な未経験ながらの視点や疑問を残しつつ、入門者がどういった行動に出るのかという点を残すことは意味があることだと著者は思います。
 突っ込みどころが満載かと思いますが、もしも指摘点等があればお知らせください。

ペネトレーションとは

 私自身が本職のペネトレーションテスターではありませんので、これを定義することは難しいです。そのうえで私のイメージとして簡単に言うならば、ネットワークに接続されたコンピュータ群を実際の攻撃者が使う侵入技法等を用いて、実際の攻撃者と同じようにシステムを侵害していき、システム全体の安全性を評価する行為といった感じです。

※場合によっては、Stand-Aloneなシステム(ネットワークに接続されていないようなシステム)を攻撃対象とすることもあるかもしれません。

OSCPとは

 OSCPとは、 Offensive Security Certified Professional の略で Offensive Security 社のFundimentalな部分を扱うペネトレーション認定資格です。日本語でいえば、「攻撃的セキュリティ認定専門家」といったところでしょうか。 資格を取得するためには、初期調査(Initial Recon) → 初期攻撃・足がかり(Foothold) → 侵入後調査(Post Exploitation) → Privilege Escalation(権限昇格) → 完全侵害 (Fully Compromise) & 侵害後調査(Post Exploitation) → 横移動(Lateral Movement) といった手順を実行していき、合格となる基準を満たす必要があります。まさに「ペネトレーションとは」で概略した行為を試験で実行し、その技能を試す試験です。ただしこの手順はあくまで試験でのフローなので、シナリオによってはペネトレーションでは権限昇格をせずに横移動をしたりする可能性やいきなり高い権限を取得できるなど手順が異なることがあるでしょう。

OSCP取得を目指す前に

 正直ガイドを作っている私が言うのも変なことですが、大切なことなのでお伝えしたいことがあります。それは今すぐOSCPがほしいとか、どうしてもサイバーの世界にいきなり飛び込みたいとか、そういった「意欲が結構な程度で強い状態」でなければ、この先を読むことはお勧めしません。
 まず、私自身もやってしまいますが、試験の内容を知りながらそれに合わせて勉強をするというのが、やはり違和感を感じてしまいます。例えば、TOEICなんかがその例になるんですが、大問がいくつあって、それを〇〇の方法で解こう・・・といったようにあらかじめ設問の特性を知りそれをついたような解き方です。これって結局のところ、TOEICの試験の勉強であって最終的なゴールである英語を取得するという点からみると遠回りしているようにしか見えないと思います。なので私もそういったやり方を完全にしなかったかと言われればNoですが、少なくともOSCPをとるまでにいろいろな遠回りをしています。
 また、私にはまだまだ手が出せないものすごくレイヤの低い話だったり理解が難しい話をしているまさに私にとってのヒーローのような技術者の方々が、「サイバーだとかに入る前にまずはゆっくりコンピュータサイエンスの基礎をやったりプログラミングをしたりしなさい、サイバーはそれから」といってるのをたまに見かけます。そして私は、この意見に賛成します。結局のところ、Kernel開発だとか私の勝手なイメージですが本物のHackerだなと思えるようなことをやるには、やはりコンピュータの原理だとかそういうのを知っていないとダメだということが最近になってわかってきました。私にはCPUの動作原理や高度なOSに対する理解もなければ、現実で使われているWebの様々な技術に詳しいわけではありません。時々本質を知らないのに攻撃だけ学んでいて良いのか?と自答してます。(正確にはしてしまいます。)
 一方で矛盾するようですが、この答えは、残念ながら出ていません。コンピュータの原理だとかが必要でそれを最初にやった方が良いかもしれないと気付いたかもしれないのに、はっきりとNoとは言えない自分もいます。[OSCP取得を目指す前に]は、このガイドを書いている最後の方の時点で書いていますが、今こうして書いている間にもよくわからなくなってきました。ただ一つ言えるのは、「好き」であれば、正規の方法じゃなくてもなにか素晴らしいことが起こるかもしれないと今自分が思っていることです。コンピュータの原理をじゃあ今から学ぼうとして、次の日から私が楽しんで学習をするかといえばおそらく違うでしょうし、すぐにさぼるかもしれません。自分が嫌なことでも向き合っていかなくてはいけないものわかります。ただやはり「好きなこと」って、たとえやり方が一般的に変であっても、後々にすごい何かを生み出すんじゃないかなって気がしませんか?と無責任ですが思ってます。その意味で「意欲が結構な程度で強い状態」と書かせていただきました。この辺りは、皆さんご自身で判断をしてください。私もまだ答えが見つかりません。
 また体験記の方でも書いていますが、私自身自分で勉強法を探すところからすでにハッキングは始まっていると考えています。その意味でこの記事は、ネタバレになる可能性があり、それはつまりマシンのWriteupを見るのと同じことになるかもしれません。自分で答えを見ないで手探りの状態からでしか発見できないことがあるのも確かであり、それがTryHarderが言いたいことなんだと思います。
 今後あなたが高度に成長して、とても難しい問題にぶつかりました。何か自分で仮説を立てて、実験をしなければならないとき、おそらくその時にはガイドはありません。あなたはこれまで何かの教材やガイドに頼り切って学習をしてきました。さてあなたはどう向き合いますか?あなたがもしかしたら自力で学習をしたら、何か別の発見があり、この問題への対処は違っていたかもしれません。この自力すら定義が難しいです。本だって、優秀な技術者が本という媒体を通して教育しているにすぎません。そのあたりの加減もご自身で判断してから読み進めてください。

OSCP取得するまでにかかる期間

 
 私は、0の状態(といってもC言語の風化された知識はありましたが・・・)から結局のところ、約1年半ほどの時間をかけてOSCPの取得をしました。それは[OSCP取得を目指す前に]で述べたように、「攻撃だけ学んでいてもよいのか?」という迷いだとか、マシン攻略以外にもPwnを学習したり、OSCPでは出題されない範囲のWeb攻撃の学習、サーバ構築だとかそんなことをしていたからです。ある程度OSCPだけに的を絞って勉強をしていれば、おそらくもっと短い期間で合格は可能だったと思います。
 またこれは完全な私の予想でしかありませんが、まったくの0から後述している条件をクリアし、PWKに臨みOSCPに合格するには、おそらくですが8か月~1年程度の時間が必要になるでしょう。まず基本的なネットワークとプログラミングの学習に2か月~3か月程度かかり、その他の下記で必要とされている知識のカバーに1か月~2か月程度、マシン攻略に1か月~2か月程度、PWKに3か月、その他の学習に1か月~2か月程度という流れになると思います。本当に完全にOSCPだけに的を絞れば、もう2か月程度ぐらいなら短縮できると思いますが、ゆっくりやるべきだと思います。ちなみに私の場合のこの最初の20台は、寝る食べる風呂仕事以外はすべてセキュリティの勉強に時間を充てていた(何なら仕事が暇な時にも職場の環境を侵害するにはどうしたらいいのか?とかそんなことばかり考えてました。)ので、1か月ぐらいだったと思います。だから普通にやっていればもっと時間がかかっていたと思います。

PWK受講の前提条件

PWKに臨むにあたり、以下の条件を設定しています。

・PWKのラボ期間は、90日とする。
・社会人を対象とはしているものの、平日は3時間~4時間、休日すべての時間をPWKと向き合うことができる。

 なかなか厳しいかもしれませんが、未経験がそんな簡単に取れる資格ではないということは、この設定からある程度は分かると思います。また下記に示す前提条件となっているものの、その多くはこの記事での紹介はしません。あくまで勉強のきっかけとなる部分を教えるだけで、0から10までやるとなると私がいなくなります。

According to Offensive Security

 Offsecによれば、PWKの受講にあたり必要とされるものは以下のことが要求されています。

・Solid understanding of TCP/IP networking
・Reasonable Windows and Linux administration experience
・Familiarity with basic Bash and/or Python scripting

 私が思うに、これを書き換えると

 TCP/IP Networking の基本的な理解があり、Python Scriptingがかろうじて可能で、bash/powershellのスクリプトが読めて、下記に示すマシンの攻略を経てその内容の理解できる程度の力、およびその過程の中でのWindows Linux でのターミナル操作ができるぐらいのOSに対する理解がある方

 だと思います。

著者なりの必要事項

 私が長々と書いた体験記を最後まで読んでくれた方にはわかると思いますが、上記の項目にはないですが必要なことがあります。

20台のマシン攻略

 こちらは、PWKでのラボ体験を快適にするために必要です。PWKでは、これらの経験がない人用にももわかるように、いわば教科書的なPDFが作成されていますが、はっきり言って、まったく経験がない状態でPWKに臨むと、切りつめてもPDFの演習に30日以上の時間が奪われることになると思います。英語に不安がある場合には、さらに時間がかかるかもしれません。よってPDFを0から読むことは避けたいところです。
 そのためにはある程度のマシン攻略の経験が必要です。具体的な数でいえば、「簡単」とされる20台程度になると思います。この20という数字は、私の勘です。根拠はありません。けど大きく外してないと思います。その根拠は、ええ!勘です。(そしてこの簡単が厄介で簡単でなかったりするんです。)そして実際に20台程度のマシンを解こうとすると、早い人で1か月、かかる場合には3か月ぐらいかかるかもしれません。ですが事前に解いて(実際には答えを多く参照することになるでしょう)おくことでラボ攻略に多くの時間を割けます。PDFは長くても1か月程度で終わらせるようにはしておきたいところです。もしもあなたがお金持ちであれば別ですが、そうでなければ貴重なラボ時間は有限です。

TCP/IPネットワーク

 もしもあなたがIPアドレスすらわからないのにOSCPに臨むというなら、180度転換して家に帰りましょう。というのは冗談ですが、OSCPは、初期の私のようにIPアドレスすらわからない人が入門する世界ではありません。しっかりと書籍や入門サイトでTCP/IPネットワークに関する理解を付けてから望んでください。ただTCP/IPネットワークの理解といっても広範すぎるのも事実です。よってひとつの目安としては、CCNAレベルのネットワーク知識が要求されると思ってください。ただしルーティングプロトコル等の理解は必要なく、ルータやL2スイッチの各種設定が求められることもありません。本当に基本的な部分を学んでください。
 例えば、TCPのコネクションの確立のされ方などです。PDUなどについては細かく覚える必要はありませんが、どういうパケットがどういうシーケンスでやり取りされるかといった理解は必要です。これがないとポートスキャンにおけるSYN Scanなどが理解できません。パケットの構造などの理解求められるのは、実際にパケット等を生成するspoofingツール等を作成する際に要求されますが、OSCPのレベルではまずそんなことはしません。

Python

 もしもあなたが全くプログラミング言語に触ったことがなく、且つOSCPの取得を考えているのであれば、そんな無謀なことを考えるのはやめましょう・・・といいたいところですが、もしそうなら基本的にはPythonを選択してください。そして、その基礎文法を学んでからPWKに臨んでください。PythonはあなたがOSCPのレベルの世界でおそらくもっとも触れるであろう言語で、多くの攻撃コードがPythonで書かれたりします。よってその理解をするためにPythonとは切っても切り離せません。また簡易的なスクリプトを書けば作業が楽になるという場面が出てきます。そういった際にPythonは光り輝きます。今後のために早いうちから仲良くしておきましょう。

PHP

 PHPは、Webの世界でよく見かける言語でおそらく入門者が触れていく各マシンで最もよく目にするサーバサイドで稼働している言語だと思います。Web攻撃の中でもPHPのコードの理解等が求められる機会があり、Pythonほどではありませんが少なくないPHPとの対話があります。よって入門サイトレベルで良いのでPHPの基本的な文法は理解しておきましょう。加えて、Webサイトの簡単な作り方をPHPの学習を通して理解してください。ただ「実際にサイトを作って見せろ」というものではなく、Cookieだとかセッション管理だとかそういう仕組みを理解しようってことです。

SQL

 Webアプリケーションは、その使用する各種データを背後にあるデータベースに蓄積します。OSCPの中で最も目にするデータベースといえば、SQLを使用したRDBだと思います。特にLinuxではMySQL、WindowsではSQL Serverと対話することが多いです。PHPの学習の過程で必ずSQLに触れる機会があります。できればLimit句等を使って意図したとおりにレコードの出力をある程度制御できるぐらいの理解があるとよいと思います。たまにNoSQLであるMongoなどに遭遇しますが、OSCPレベルでは、Mongo自体は出てくれど、NoSQL Injectionをするマシン(ネタバレなるので詳細は言えませんが別のInjection自体はします)はありません。

Webの理解

 攻撃の起点のほとんどはWebとなります。なぜこうなるかというのは、実際の脆弱性の多さもありますが、Webを起点としてのラボマシンを作成しやすいというメタ的な特性もあります。なのでWebに関連する技術はなるべく理解しておくことをお勧めします。例えば、HTTPだとかDNSといったプロトコルは最低限理解しておくことを推奨します。これらはWebサイトの作り方で大半をカバーできるかもしれません。

Web攻撃の理解

 この点は、PWKでおおよその解説があり他の項目を優先したければ飛ばしても構いませんが出来たら知っておくとよい項目と言えます。Web攻撃には、その特性からイニシャルシェルに結び付きやすい、もしくはそのままシェル獲得に持っていけるものがあります。その中でOSCPレベルで知っておくべき攻撃は、OS Command Injection, SQL Injection, Local/Remote File Inclusion, Path Traversal, File Upload Abusingあたりでしょうか? XSSやCSRFも現実世界で発見されたら笑えない脆弱性で、特にXSSは脆弱性界の雑草みたいなイメージを私は持ってますが、雑草のわりにユーザのインタラクションを再現するBotを用意する必要があったりと少なくともラボでの再現に手間がかかるのかあまり見る機会はありません。

bash

 Linuxにおけるシェルといえば、bash等が真っ先に思い浮かびますが、それらを使って簡単なシェルスクリプティングをすることがあるかもしれません。私はPWKの中でシェスクリプティングをする必要性のあるマシンには出会わなかったと思いますが、マシン内部にあるシェルスクリプトの内容を理解する必要があることはありました。なので簡単なものでいいので読めるぐらいには学習しておくことをお勧めします。

Powershell

 Windowsにおけるシェルといえば、Powershellになります。Linuxではshだのbashだのzshだの「一体どんだけシェルがあるんだ!ひとつにしろ!!!」と言いたくなりますが、Windowsは基本的にPowershellでの操作となります。こちらもPowershellを用いたスクリプティングをする機会はなかったと記憶していますが、内容を理解したりする場面は大いにあるので基本的なところは押さえておきましょう。ただPowershellは本当に機能が豊富なのと、Windowsにおけるシェルなので学習順序的にはbashが先になると思います。なので先にbashなどのシェルを簡単に理解してから、Powershellで同じ対話はどうやるんだろう?といった感じで理解していくとよいと思います。

Linux/Windows

 これらのOSに関する基本的な知識も必要です。特といえばに重要なのは、認可周りに関する制御です。例えば、OSCPのレベルで知っておけばよいLinuxの認可制御といえば、RWXの単純な制御ぐらいだと思います。Windowsではこうも簡単ではありません。詳しく学ぼうとすると、Assess Rightsだとか複雑で難しいものが待っています。(参考) Windowsに関しては、私はLinuxマシンを70台近く解いた後に学習をしたため、基本的な認可制御の概念等は身についていて、Microsoftの各種ドキュメントを見ながら学習していったため、ドキュメントを見てほしい(参考のリンクの記事は、とてもよくまとめられていると思います。神記事ですが、入門したてで読むとたぶん意味が分からないはず。)としか言えません。ごめんなさい。
 他には、通常と違う何かを見つける能力・・・という漠然とした何かなんですが、普通のLinux/Windowsマシンでは見かけないものであると判断する能力が必要になります。例えば、WindowsでSSHが起動していたら、それはちょっと違和感を覚えます。例えば「わざわざ標準的でないSSHを使う何らかの理由がある→SSHを使っていてクレデンシャルが落ちている可能性がある。」といった思考にたどり着きます。こういった思考になるには、そのOSで「普通ではないもの」をかぎ分ける能力が必要なんです。これには、このファイルはこのOSにはよくあるだとか、この設定は別におかしくないだとかそういう経験が必要になります。これは、様々なPrivilege Escalationの各種ツールが列挙する情報を一つ一つ最初はじっくり見てどんな情報なのか?ということを勉強することである程度磨くことができます。よって20台のマシンを解くときには、単に権限昇格をするだけでなく、それらについても意識を向けるとよいです。

英語

 最後は、英語についてです。多くの方が英語について心配をしていると思います。この記事を読んでくれている人の中には、もしかしたら高校生もいるかも知りません。高校生が850ページのPDFに耐えられるかというと確かに難しいものがあるかもしれません。ですが、これはOSCPの世界に限定されることではなく、セキュリティの世界では英語が基本言語です。Pythonと同じぐらい著者は英語が重要だと思います。Pythonが攻撃コードを読むために必要なら、英語は技術文書や海外の技術系の記事を読むために必要です。昨今は優秀な翻訳機がありますが、そればかりに頼ると今後のあなたの学習の質が低くなるかもしれません。なるべく英語から逃げず、翻訳機に頼るなとは言いませんが、英語を見るだけで逃げたくなるというのはやめましょう。翻訳機は常に正しいとは限りません。あなたは7割か8割程度の理解の攻撃コードを常に信頼して実行しますか?
 著者自身もそこまで英語が堪能なわけではありませんが、Readingについては、抵抗感なくある程度読めるため、英語での検索や英語記事の参照には抵抗はありません。私自身がほとんどスキルもなく、現役のエンジニアのサポートが一切ない状態でここまでこれたのは私に多少の英語のスキルがあったおかげだと思っています。常に英語を使え!!!というわけではありませんが、少なくとも少しずつ慣れる努力はした方が良いと思います。

20台のマシン攻略

 [PWK受講の前提条件]に「20台のマシン攻略」とありましたが、それについて私が過去に解いたHack the BoxのEasy Mediumマシンから難易度をソートしたものを紹介します。過剰なRabbit Holeがあったり、CTFぽかったり、少々無理な推測や総当たりが必要なマシンは排除してあります。(例えば、WallやFirendZone) 難易度のソートの基準は、これらのマシンのWriteupを一応すべて目を通してなんとなく決めました、しかもさっと目を通しただけ(オイ)。1つ順位が違うだけでまったく難易度が異なるかもしれません(無責任)。もしも解けそうになかったらWriteupを小出しで見ていきましょう。OSCP like かは考慮していません。またFootholdは、イニシャルシェルをとるまでを指し、Privilege Escalationは、イニシャルシェル後全てを指します。

※一部のPrivは同様の手法であったり、少し特殊なのでそちらは省略しています。

Foothold (Linux)

Lame, Mirai, Bashed, October, OpenAdmin, Traverxec, Irked, Blocky, Curling, Spectra, Cronos, Popcorn, Postman, ScriptKiddy, Shocker, Bank, SolidState, Haircut, Academy, Delivery

Privilege Escalation (Linux)

Mirai, Bashed, Shocker, Bank, Cronos, Delivery, Haircut, Spectra, Postman, Academy, SolidState, Curling, OpenAdmin, Traverxec

Foothold (Windows)

Jerry, Netmon, Buff, devel, Arctic, Granny, Jeeves, Access, Servmon, Bastion, Bounty, Remote

Privilege Escalation (Windows)

Optimum, Granny, Access, Love, Bastion, Bounty, Jeeves, Servmon, Remote

 これらの特に Linux の最後の方にあるマシンは、正直OSCPレベルではないようなものとなっています。Windowsは、比較的どれも素直か一癖あるがやる価値があるマシンを選んだつもりなのでどれもOSCPのスコープの範囲内にあるとは思います。一つの山で4時間~5時間かけても解けそうになかったら、その部分だけwriteupを見てもよいと思います。私個人の予想としては、おそらくですが本当に一台も解いたことがない人が、これらのマシンにすべて挑戦するとおそらく多くのマシンで答えを見ることになると思います。私は最初から答えではないものの、ほぼ答えと同じようなヒントが載ってる公式のフォーラムを見まくっていました。けどそれでいいんです。時間は有限ですし、最初からTry Harderすると潰れます。
 またもしも追加でもっと学習したいということであれば、私はHTBではなく、OffsecのProving Groundをお勧めします。(というか最初からこっちでいいかも・・・)理由としては、まずHTBでのOSCPレベルのマシンは少ないということです。特にWindowsマシン自体は、そもそも数が少ないため必然的にeasyマシンの数も少なくなります。PGでは課金した場合には、Offsecと一般ユーザが作成(提出して採用されるとお金もらえます。リンク)したWindowsマシンに挑戦できます。(今確認したら、easy:7, medium:16, hard:4でした。) 私自身はPGで、windowsマシンのMedium以上を10台程度しか解いていないので何とも言えませんが、「こんなんわかるかい!!!ドンッ!!!」というようなマシンに巡り合ったことはありません。Hardとされるマシンも程よいHardで、ユーザを殺しに来ているHTBのHardとは異なる感じです。OSCPではWindowsマシンの方が重要なので、できればこっちの経験を優先したいところです。
 一方でHTBのマシンは基本的に難しいものが多く、当時の私が目を輝かせながら初めて解いたLabotoryというEasyマシンも口にしたらMediumマシンで騙されました。ひどい。もちろん私のふざけた不満だけが理由じゃなくて、最近のRedditでOSCPの合格者の投稿を見ると、PGを勧める声が多いからです。さらに言えば、PWKは古いマシンが多くPGのほうが勉強になったという声を上げる人も結構います。HTBに騙された私が言うのもなんですが、騙されたと思ってPGをサブスクリプションしてみてはどうでしょう?(offsecの回し者ではありません)月20ドルなのでHTBとそう大差のない料金設定だと思います。
 ただ唯一欠点を上げるとすれば、Writeupが少々手抜きなのでなんでこのコマンドを打っているのかといった初心者の人にはわからないことがあるかもしれません・・・うーんOffsec・・・あとは君に任せた!!!(TryHarderを言っている張本人なので、あえて手抜きのWriteupなのかも・・・)
 より詳細なリストが欲しい人は、「oscp recommended VM list」とかで検索してみてください。これらを見つけるのも練習だと思って、ご自身でリストを見つけてください。そしてどのリストを使うか、自分で判断してください。

Webの学習

 私は、体験記の方で示している通り、当時HackTricks書かれていたWeb攻撃のすべてを上から下まで見て、自分なりの解釈や攻撃の仕方をノートにメモするというやり方をしていました。正直このやり方は、OSCPでは明らかにオーバーワークとなります。(ただもしやったとしたらOSWEでも通用する知識が身につくはずです。)例えば、LFI一つをとってみても,LFI bypassといったテクニックは出てきません。そのままLFIが刺さりそうなところにLFIのpayloadを差し込むとそのままexploitできることがほとんどです。そしてOSCPレベルで知っておくべき攻撃は、OS Command Injection, SQL Injection, Local/Remote File Inclusion, Path Traversal, File Upload Abusingあたりです。SSTIだとかXXEとかInsecure Deserializationだとかまでスコープを広げると完全なオーバーワークとなります。絶対に出てきません。約束できます。
 Webの概要を学ぶのであれば、Webに関する入門書やWebサイトを実際に構築していく入門書を当たるとよいと思います。その中でCookieやセッション管理、データベースへの接続など基本的な内容に必ず触れるはずです。Webセキュリティに特化した日本語での入門的な学習ということであれば、やはり「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」だと思います。
 Webの基礎が何となくわかってくれば、ほとんどの攻撃はPHPをベースに解説がされているので、コードの意味が分かるようになっているはずです。なので特段の学習なしに上記に挙げた攻撃は簡単に理解ができると思います。様々な攻撃を勉強したり試すサイトとしては、以下のサイトがおすすめです。

HackTricks

 Web攻撃のすべてはここから始まりました。とんでもない量のコンテンツがあります。

PayloadsAllTheThings

 HackTricksの生き別れた兄弟サイトの様なものです。

Web Security Academy

 Web攻撃のお供であるBurpを開発しているPortSwigger社による学習サービスです。解説がものすごくわかりやすく、当時自分も使用していて、今見たら以前より豪華になってました(笑)

PentesterLab

 こちらもWeb攻撃専門の学習サイトで、たくさん攻撃が試せます。素晴らしい。

Privilege Escalationの学習

 基本的にPrivilege Escalationは、Initial Shellを獲得するより簡単なことが多いです。なぜならスコープがより狭いからです。なので学習する範囲には、それなりに限りがあります。個人的には、HackTricksにあるPrivilege Escalationの項目をすべて確認していますが、同じくOSCPではオーバーワークとなります。以下にOSごとに着目すべきEoPベクタで且つOSCPのスコープのものを取り上げています。
 またPrivilege Escalationをする際には、必ずKernel Exploitの選択は一番最後にしましょう。どこかのブログかは忘れましたが、海外の非常に有名なペンテスターかセキュリティの研究者の人が書いていた記事の中で「権限昇格では、設定ミスや過剰な権限の設定がないかを探し、それでもなければ最後に脆弱性を使う」というようなことを言ってました。脆弱性を使った権限昇格はKernelExploitだけではありません(例えば権限が高いプロセスの脆弱性を使うとか)が、少なくともKernelExploitは「これじゃない感」がある権限昇格ではあります。また当然ながらKernelといった難しい領域への攻撃なのでコードの内容自体が理解できないこともおおいはずです。権限昇格で最初の方に教えられる攻撃手法でスクリプトから簡単に攻撃を達成できるため勘違いしてしまいがちです。おそらくあなたがKernelExploitの領域にしっかりと足を踏み入れるまでには、もっと長い月日がかかると思います。(私もそうです) まるで小学生のころに習った1+1=2の意味を大学等で勉強する・・・そんな感じに似てるかもしれません。(数学好きな友人がそんなこと言ってた)
 内容が理解できなれば、どんな攻撃をしているかわからずもしかしたらクライアントのマシンを壊してしまうかもしれません。Kernelへの攻撃ならなおさら危険です。大体の場合には、メタ的ですがKernelExploit以外の攻撃ベクタが簡単なマシンには用意されています。いずれにせよ安易にKernelExploitを使用することは、確実にあなたの権限昇格の嗅覚を鈍らせます。いずれ退化してにおいがしなくなるでしょう。困った。
 一方で困ったばかりですが、別の意味で困ることがあります。それは私の知る限りでは、Privilege Escalationについては、攻撃を試す専用の演習サイトはないように感じます。本当にEoPだけを焦点にしたい場合には、Udemyのような学習サイトを使用するか、HackTricksのようなCheetSheet見る、下記で示すEoPのツールの列挙する情報を一つ一つ見ていき勉強するなどがあげられます。

Linux

 Linuxでは、以下のキーワードに関連する項目を特に学習するとよいでしょう。

 ・Sudo Abusing, Insecure SUID/SGID Binary, Scheduled jobs, Uncommon Privileged Process, Password Hunting

HackTricks PayloadsAllTheThings
Windows

Windowsでは、以下のキーワードに関連する項目を学習するとよいでしょう。

 ・AlwaysInstallElevated, Access Token Abusing, Scheduled jobs, Unquoted Path, DLL Hyjack, Uncommon Installed Software, Uncommon Privileged Process, Password Hunting

HackTricks PayloadsAllTheThings

Buffer Overflowの学習

 Buffer Overflowは、旧試験でもはや出来レース化していた試験科目でしたが、その問題をOffsecもようやく認識したのか、ついに常設の科目ではなくなりました。OSCPで出題されるBoFは、Stack-BasedのALSRもなければ、DEPもないまさに丸裸のBoFです。猫で例えるならまるでスフィンクスのような感じです。Pwnでこんな問題が出たら不具合ではないかと報告が来るかもしれません。一方でOSCPで唯一の低レイヤの話であり、直接デバッガを操作してメモリ内の挙動を調査したりと、初めてこのレイヤに降りてくる人にはその内容は決して簡単な話ではありません。そして全く知らなかったら絶対に解けない問題ではあり、出題される可能性はあるので解けるようになる必要はあります。
 幸いにも日本語の書籍で、この分野を事前に十分に学習できる書籍「はじめて学ぶバイナリ解析 不正なコードからコンピュータを守るサイバーセキュリティ技術」があります。この本さえしっかりやっておけば、あとはコース資料の演習以外でやることはないと思います。どうしても不安であれば、これまたOSCPで有名なBoFの練習マシンがあるので、TryHackMe : Buffer Overflow Prepを試すとよいでしょう。

Active Directoryの学習

 Active Directoryは、旧試験では、特に勉強の必要がなかった分野のようです。私自身は、新試験の発表がある前までは、旧試験でもADマシンがあると思い込んでいましたが、そうではないと知ってびっくりしました。また私自身の学習としては、サーバ構築の練習の際にLinux上ではありますがKerberosサーバを構築し、バックエンドのデータベースとしてOpenLDAPの構築をしたため、Kerberos認証のシーケンスやLDAPのクエリの意味や仕組みは知ってました。よってある程度のActiveDirctoryに対するイメージというものはありました。ただどう攻撃するのかとかは結局あいまいなまま、体験記で挙げた4台のマシンを攻略してPWKに臨みました。
 OSCPレベルでは、正直PWKの内容をしっかりやれば問題ないというのは、Redditの投稿でも一致している意見です。他の学習は必要ありません。どうしても事前に準備がしたければ、下記のキーワードに関係する事項を勉強しておくとよいです。

 Kerberos Authentication, LDAP, asreproast, kerberoast, Password Spary

 またActive Directoryを学習するサイトは、これまた少し厄介です。というのもその性質上、単独のマシンでもADに対する攻撃の学習はできないことはないですが、やはりそれぽくないからです。DCだけのADって悲しくないですか?それはやはり作る側も同じで、やはりそれなりの現実味のある環境セットを作ろうとします。ただそれをすると大変でリソース的にも開発的にも負担がかかります。なので、いくつかのサイトでそれが試せるものがありますが、有料であったりします。上記のキーワードについて調べ理解するだけでよく、実際にマシンで演習を行う必要はないと思います。
 どうしてもということであれば、下記のサイトがおすすめです。ただ先ほど述べたように、ADマシンはそれなりに開発コストがかかるため、OSCPレベルのスコープの話だけでは終わらないことが多く、どれも内容は広範でオーバーワークになるものばかりです。よって辞書的に使うか、私のようにCheetSheetを上から下まですべて読むみたいな修行をしたい人以外は、上のキーワードだけに的を絞ります。

 Attacking Active Directory: 0 to 0.9
 HideAndSec:ACTIVE DIRECTORY
 Github:Active Directory Exploitation Cheat Sheet
 Active Directory Security:Attack Defense & Detection
 HackTricks:Active Directory Methodology
 Tryhackme
 HacktheBox
 PentesterAcademy

 またもしもあなたにその気力があるのであれば、自力でAD環境を構築してみるのも手です。はっきり言ってADとは今後切っても切り離せない関係になると思います。一方でなかなか実験できるところがない・・・そうなると自力でラボを構築して攻撃を試す環境を再現する必要が出てきます。あなたがお客さんのLive環境を実験台にする勇気があるなら話は別ですが・・・ただしその過程は入門者には困難を極めることになると思います。ですからよくよくこの辺のスコープは自分で考えて、自分の使える時間等と相談しながらやってください。

Pivotingの学習

 
 Pivotingとは、特定のマシンを侵害した後に、そのマシンからしかアクセスできない内部ネットワークで動き回るためのテクニックです。具体的には、Port Forwarding とか Tunneling だとか言ったキーワードが関係します。PWKでもPivotingはtwisted content (正確な表現は忘れた)という紹介があるぐらい説明されてもわかりにくいセクションです。また残念なことにこれも、マシンとしては用意できないことはないですが、通常は複数台の複数のサブネットの環境下で使用されるテクニックなのでなかなか体験できるマシンがありません。HTBではだんだんと難しいマシンを解いていくと、これらを部分的に学習をするマシンがあり、例えば、localhostからしかアクセスできないサービスポートをSSHやchiselを使ってport forwardしてアクセスするだとかそういうことをやります。Tentackleのような高度なマシンでは、内部ネットワークのスキャンを疑似体験できます。
 正直この分野は、初見で説明されてもなかなか難しいところがあるので、できれば少し事前に学習しておきたいところです。ですがなかなかそのマシンがありません。自分でSSHサーバと踏み台サーバを構築して練習とかをしてみるのが一番だと思います。

使用するツール

 OSCPのレベルで使用するツールはそんなに多くありません。正直言うと著者自身がいろんなツールに手を出すのが嫌いです。(使いこなせない・・・) こちらの記事で、ペネトレーションテスターとしてのツールの取り扱いに関する見解が示されていますが、至極当然のことだと思います。じゃあNmapの挙動からすべて見るのか?とかいうと、それは無理です。ただ認知されていないようなツールや特定の個人によるツールは、多くの検証がなされたわけではなく意図しない挙動を生む可能性もその分高くなります。そのため、それらのツールを自分の常用ツールとして向かい入れる場合には、よくよく調査をして使いましょう。
 またそのような理由から細かいツールの使い方の説明はしません。さらに言えば、どのタイミングでどういった判断で使うのかということまで細かく説明するのは大変です。(こっちが本音) よって簡単な紹介程度しかできません。ただ一つ言えるのは、以下に示されているツールは、もしも皆さんが私と同じマシンの数を解いたら紹介するだろうというようなツールであることです。

The boku no kangaeru sai kyō no Tool

 Google
 ぼくのかんがえるさいきょうのつーるは、googleです。これがなければはっきり言って勉強は不可能だったというぐらいです。「Google is your friend.」にはいろんな解釈があると思いますが、まあそういうことです。検索しまくりましょう。無料です。私の場合、この勉強を始めてから正確にカウントしてないですが数百件ぐらいお気に入りができました。

Tools for Host Discovery

 Nmap
 ポートスキャンといったらこれです。これだけ使ってれば何の問題もありません。スキャン漏れが心配であれば、他のスキャニングツールも使いましょう。

Tools for Web

 Burp Suite
 使うシーンはいろいろあると思いますが、Webで攻撃が刺さりそうな場所を発見した場合によく使います。使い方は、いろいろなサイトで紹介がありますので簡単に見つかるはずです。

 gobuster
 Webにおけるディレクトリ・ファイルを指定されたwordlistに基づいて総当たりをしてくれるツールです。Webの調査でほぼ毎回使います。

 feroxbuster
 再帰的にディレクトリ・ファイルを列挙してくれるgobusterだと思ってください。Directory Listingが有効になってない箇所にはこれを使います。
 
 wfuzz
 OSCPレベルだと使う機会は正直ありませんでしたが、クエリ文字列とその値に対するfuzzing, クッキーに対するfuzzing, vhostの列挙等でよく使います。

 skipfish
 たぶん試験で使ったら怒られる(失格)Webスキャナです。ディレクトリ列挙やファイル列挙は当然ながら、各ページの脆弱性の検証等までやってくれ、その結果としての異常なステータスコードの検出等を教えてくたりします。

 sslyze
 SSLの各種設定を確認するスキャナです。

Tools for Privilege Escalation

 LinPEAS
 LinuxのEoPを行う際に必ず実行するツールその1です。EoPベクタ列挙ツールと言ったらこれです。これ以外は正直使わなくてもいいような・・・ってぐらい今までのマシンでこれしか使ったことないです。

 pspy
 LinuxのEoPを行う際に必ず実行するツールその2です。プロセスをリアルタイムでモニタリングして、隠されたScheduled jobsを見つけてくれます。何度助けられたかわかりませんし、自分のExploitが正しく高い特権で実行されているかなどの確認もこのツールで行えます。

 WinPEAS
 WindowsのEoPを行う際に必ず実行するツールです。正直、Active DirectoryでないWindowsマシンならこれしか使いません。
 
 JuicyPotato
 Token Abusingでお世話になるツールで、Potato Familyの一員です。Lonely, Hot, Rotten, Juicy, Rougeといったジャガイモたちがいます。細かい使い方はここでは説明しません。挙動の概略が知りたい方は、こちらのリンクで簡単な概要がつかめます。私は、Windowsの勉強の際に、JuicyPotatoの挙動が気になったためコールされるAPIレベルで学習をしましたがOSCPではオーバワークになるでしょう。ただのちのOSEPでその勉強は意味のあることだったと気が付きます。

 Rouge Potato
 Juicy Potatoがバージョン的に動かないものであれば、こちらを使います。

Tools for Pivoting

 chisel
 Pivotingにおけるトンネリングツールといったら、chiselでしょうというぐらいこれしか使いません(少なくとも著者自身の経験の範囲では)。SSHサービスがなくても、自在にトンネリングをさせることができます。Windows/Linux環境で共に利用できて、chiselの使い方を覚えれば他のツールに手を出す必要はないと思います。

 Proxychains-ng
 chiselやSSHからのdynamic port forwardingをしてsocksプロキシから踏み台サーバ経由で内部ネットワークにport scanningとかをする際に使います。

Tools for Active Directory

 
 Powerview
 Active Directory Enumeration の Swiss-Army Knife といったらこれ。OSCPレベルのActive Directoryであれば、PowerViewによる手動列挙で十分対応できます。

 BloodHound
 OSCPのスコープだとまずオーバキルですが、一応紹介します。Powerviewでは列挙しきれないような大規模なAD環境でその真価を発揮し、自動でAD環境に対する列挙を行います。

 mimikatz
 WindowsでPost Exploitationする際にほぼ使うツールです。ホストを完全に侵害した後の横移動を実現するのクレデンシャルやチケットのダンプ、Token Impersonation等をするために使います。

Other Tools

 Impacket
 Lateral Movement や Exfiltration 系のツールが詰まっています。impacket-smbserverやpsexec, smbexecあたりをよく使います。

最後に

 以上で大体の紹介は終了となります。PWK自体のガイドも含めるかは悩みましたが、それはOffsecのコンテンツに対して過剰に手を出しすぎるかもしれないのでやめました。(気になる人はTwitterでDMください) 改めて見返すと全然とガイドになってない気がします・・・私が想像していたのは、もっと体系的なガイドだったんですが、残念ながら個人的にあまり良い出来のガイドにはなってません。なんか思いついたことを羅列しただけのような気がします。これには以下のような理由があると思います。

・書いているうちに体力が消耗してしまいよくわからなくなってきてしまった。
・入門者なりの視点をすでに忘れてしまっていて、ここから教えてほしいという部分がよくわからなくなっている。

だと思います。なので何か要望があれば、TwitterでDMをください。可能な範囲内で記事を更新するか、直接返答します。

関連投稿

54
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
49