ひとこと

― 今日のひとこと ―
起業しました。
(2024.4.24)

2020年9月25日金曜日

OSCP受験メモ

白状すると8月に1回落ちました。
自分史上、本気で準備して不合格だった試験は初めてで、超へこみました。
というか「これ落ちるかも…?」と試験終盤に頭をよぎった時からへこんでました。
でも案外、試験後に寝て起きたらすっかり回復してました。

9月に自費で再受験してようやく合格。
嬉しさもあるけど、それより「もう受けなくてもいいんだ」という安堵感の方がよっぽど強い。

OSCPがハードな試験なのは間違いない。
技術的スキルも必要だが、それよりも精神力が重要な試験だ。
つまり、OSCP受験を通して、自分は技術的にも精神的にも成長したと言える。

思うさまメモする。


準備

過去の投稿でも書いている通り、ガイドを読了した後、残る休暇3週間はほぼ1日1台のペースでラボマシンを攻略していた。
難しいやつでも簡単なやつでも、とにかく目標は1日1台。

30分で終わることもあれば17時間かかることもあったが、とにかく毎日新しい挑戦をする。
使ったことのない攻撃手法やツール、名前も知らなかったサービス、ニッチな脆弱性攻撃。
ターゲットを攻略していくことで少しずつ自信を積み重ねていく。

実際、この期間で合格に必要な技術的スキルはほぼ身に着いていたと思う。

休暇が明け、7月1日に仕事に復帰すると、さすがにペースを保つのがきつくなってきた。
何しろ7月中旬から1か月以上ほぼ間断なく出張なのだ。
現地での仕事に備えてやっておくことも多い。

そういうわけで、7月上旬はBOFを復習。
ガイドを読み、エクササイズをやり直し、dostackbufferoverflowgood』と『Brainpan』もやった。

7月中旬から7月末にかけて再びラボに戻り、5台ほど攻略。
8月上旬はHTBをいくつかやってみたが、正直あまり面白くなかったのでこれはすぐやめた。

受験(1回目)

会社の都合で8月中に受験しなければならなかったため、3連休で受験。
エナジードリンクを買い込み、お夜食も用意して臨んだ。22時開始。

開始3時間で2台攻略し、35得点。
かなり良いペースだった。

更に6時間後、3台目を攻略。この時点で55得点。
残る15時間で15得点できれば合格。20点のマシンを1台倒せばいい。
少し頭が疲れているがエナジードリンクで誤魔化す。この調子でもう1台攻略してしまおう。
この時はかなり希望を持っていた。

数時間が経過し、一向に糸口が掴めずにいた。
管理者権限どころかinitial shellも取れずにいる。
稼働しているサービスに対し、考えられるあらゆる攻撃を仕掛けた。
しかしいずれも奏功せず。時間だけが過ぎていった。

さらに数時間が経過。まったく進展なし。
何かを見落としているのだろうとは思っていたが、頭が疲れ果てており何も思いつかない。
少し休むべきではないかと思ったが、同じ配点だった3台目に6時間かかったことを考えると、寝てしまっては時間が足りなくなる可能性があった。
焦りが大きくなり、それに比例して「落ちたくない」という心理も強くなっていき、
しかし活路は見出せず、ノイローゼのような精神状態である。
もう1台の方に切り替えようかとも考えたが、行き詰っているマシンよりも配点が高い相手を今から倒せるとも思えず。

結果として、15時間まったく進捗なし。55得点で不合格が確定した。
これが60点ならまぁ、残り24時間でラボレポートとエクササイズレポートを提出すれば10点が加点されて70得点となり、合格ラインに達する可能性はあった。
しかし55点。レポートを作る元気もなく、OSCPの窓口に「レポートは出さない」とメールしてバタンキュー。

こうして1回目の挑戦は終わった…。

反省点

寝なかったこと。それに尽きる。

事前に、「睡眠は重要です」とか「睡眠が奨励されます」とか、そういった内容の受験記はいくつか読んではいた。
しかし睡眠の重要性を過小評価し、自分の体力や気力を過信していた。そんなつもりはなくても、そうだった。
試験後に疲れ果てて眠り、目を覚ました瞬間に4台目の攻略法がわかったと同時に、自分の過ちに気付いた。。

試験機の難易度

どんなマシンが出てくるのか事前にはわからないので、難易度の感じ方は自分の得手不得手に左右されると思う。

自分の感覚だと、ガイドの内容を正しく理解していれば35点(一番簡単なマシンで10点+BOFマシンで25点)は間違いなく取れる。

20点マシンとBOFじゃない方の25点マシンはラボの多くのマシンより難しく、しかしラボの最難関級のマシンほどではないと感じた。

準備(2回目)

再受験まで4週間空けなければならない決まりだったが、その間は正直ほとんど何もしなかった。
技術的には充分合格ラインだと思っていたし、仕事が忙しかったというのもある。
HTBで1つ2つやってはみた。それだけ。結果には全然寄与しなかったと思う。

受験(2回目)

21時開始。

2時間で2台攻略し、35得点。さらに2時間弱でもう1台攻略し、開始4時間ほどで55得点。
前回を上回るハイペースでかなり順調だったが、前回はここから詰まったんだよなと思い返し、少し緊張した。

その後4時間、4台目の20点マシンに取り組むも進展なし。前回と同じ展開になるかと少し暗い気持ちになるも、前回の反省を活かしてここで仮眠を取ることに。
寝ることで時間が足りなくなったらどうしよう、と思わないでもなかったが同じ轍を踏みたくなかった。
他人には理解し難いかもしれないが、自分が「試験中に寝る」など従来あり得なかったことだ。

6時間睡眠。残り時間は10時間。

2時間ほど4台目に取り組むもやはりまったく進まない。少し焦り始めた。

思い切って5台目に取り組む。
実はここまでの間に使えそうな脆弱性は見つけていて、なんとなく攻略の仮説は立てていたが、決定的なピースが欠けているような状態だった。
3時間ほどかけてinitial shellを取得し、さらに1時間ほどで権限昇格に成功。
この時点で80得点、残り6時間弱。

点数は充分だしレポート用の証跡の確認がしたかったので、4台目は捨てて、他の4台で攻撃手順を再現しながらスクリーンショットやコマンドを集めていった。

2時間ほど残して試験を終了した。

レポート作成

有志が作ったテンプレートを使った。
日本語訳して内容を確認し、いくらか文章と構成を変えた。
内容を細かく作り込むのに案外時間がかかり、10時間ほどかけて45ページ作成。

この時、記載したExploitの証跡に若干の不備があることに気付いた。
(実行結果に影響はないが、レポートとしては美しくないものだった)

とはいえもうVPNは切られているし、証跡を取り直すことはできない。
そのまま決められた手順でレポートをアップロードし、窓口にメール連絡した。

その後

数時間後、レポートを受領した旨の通知が来ていた。
さらに50時間ほどして、合格を知らせる通知が届いた。

全体の振り返り

5月にトレーニングを開始してから合格するまで約4か月。
この間、ペネトレーションテストの方法論を体系的に習得し、効果的な手順で侵入・権限昇格するスキルを得ることができた。
様々なプロトコルやサービス、製品に対する攻撃ベクトルを理解し、OSごとの着眼点を把握できた。

トレーニング期間や試験はハードだったが、おかげで独学より圧倒的に早く成長できた。

ある程度は基礎知識が必要だが、この分野でキャリアを積みたいと考えているあらゆる人におすすめできる良いトレーニング・試験だと思う。

ちょっとお高いけどね。

2020年7月7日火曜日

OSCP学習 #5

やはりBrainpanだけでは不安だったので、dostackbufferoverflowgoodをやってみた。
少し学びはあった(OSがx64だとしてもそのアプリケーションがx86ならx86のshellcodeが要るらしい)ものの、
難易度としてはBrainpanと同じくらいで、OSCPガイドのエクササイズより一段二段易しい。

やっぱり試験もそんな感じの難易度なのかな。

では明日からラボに戻ろう。

2020年7月5日日曜日

OSCP学習 #4

6月は最終的に23台のマシンを攻略し、今月は今のところバッファオーバーフロー(BOF)を重点的に学習している。
原理自体は元々理解しているので、それを実行するまでの手順を学ぶ感じ。

OSCPガイドにはWindowsとLinuxそれぞれでのBOFについて記載があり、ラボで提供されるクライアントでそれらを試すことができる。
その両方のケースについて、改めてガイドを読み直しつつ、ラボのクライアントで再現していった。
ガイドを見ながら1度解き、手順をメモし、次はガイドを見ずに実行。
それでBOFの大まかな流れと細かいタスクを把握することができた。

ただ、これだけでは不安である。
もっと他のマシンでBOFを試し、実践力をつけたい。

OSCPラボではマシンについての情報がIPアドレス以外に提供されないため、
どれがBOFの脆弱性を含むマシンなのか、1台1台取り組んでみないとわからない。
なのでハッキングチャレンジサイトでBOFの練習をすることにした。

調べてみるとBrainpanなるマシンが丁度良いとのこと。
さっそくTryHackMeに登録して挑戦してみた。
説明文には「OSCPの実践に最適」とあるな。よし。

結果は・・・


簡単すぎない?
OSCPガイドのエクササイズより単純で、なんだかあまり学ぶところがなかった。
(BOF後の権限昇格の場面では学びがあったけど。manでshell取れるとは知らなかった)
しかしRedditなんかでは「OSCP本試験のBOFマシンはガイドより簡単」みたいな書き込みもあるし、
こんなものなのか・・・?

Githubで公開されているdostackbufferoverflowgoodというコース?もなかなか良いらしい。
一応やっておくかどうか少し迷う。


現在のところ、試験の準備状況としては悪くない気がする。
BOFは理解できた&ある程度は実践できるようになったので、あとは24時間で5台攻略という速度が必要かな。
今月中にラボを最低あと7台やって、あとはやっぱりノートテイキングの良い方法を見つけねば。。

2020年6月28日日曜日

OSCP学習 #3

現在までに21台攻略。
未だにノートテイキングに迷っており、いい解決案はない。

情報収集の自動化・効率化の重要性も強く感じており、
特にEnumerationと権限昇格(PE)の段階ではいかに速く多くの情報を集めてアタリを付けるかが大事だ。
PWKの仮想マシンにpip3をインストールするとマシンが起動しなくなるためAutoreconを使えないのが痛い。
PEの穴を探す段階でも特に有効なツールを見つけられていない。
linpeasは良さそうだけどラボの数台のマシンで試してみても何もアウトプットされず終了する。

Big4と呼ばれる、ラボの四天王みたいなマシンに鹿児島であたってしまい、
その攻略には17時間かかった。こんなの試験で出たら時間足りないぞ!

というわけで効率化できるツールを色々集めたいが、ラボも進めたい...
もうすでに時間が足りない!

2020年6月20日土曜日

OSCP学習 #2

前回#1を書いてから1週間ほど経過。
1日1台を目安にOSCPのラボを使った学習は毎日続けており、現在まで順調に14台のマシンを攻略した。

1日1台。
案外これがきついのだ。
難易度はピンキリではあるが、これまで手持ちの知識だけで攻略できたマシンは1台だけであり、
基本的にはトライ&エラー&リサーチ&シンキングをひたすら繰り返すことになる。

聞いたことすらなかったプロトコルやソフトウェアを相手にすることも多く、
情報収集して、検討して、試して、うまくいかず、原因を推測し、情報収集して、試して...
これは楽しくもあり苦しくもあり、「もうフォーラムでヒント見ちゃおうか...」と考えてしまうこともあるが、
いやここで諦めたらだめだ!Try Harderだ!と持ち前の負けず嫌い精神で踏ん張り、ということを毎日やるわけだ。

おかげでOSごとのコマンドや便利なツール類を順調にストックできており、
攻略の着眼点や、ある種の嗅覚のような感覚が少しずつ研ぎ澄まされている気がする。
何より精神的にタフになりつつある。長い日には10時間くらいやってるからな。
バッファオーバーフローが必要なマシンには未だ出会っていないが、まぁそこはHack the Boxでもなんとかなるし。。
今はこのまま進めていこう。

マシンを攻略した後は、フォーラムでそのマシンの掲示板を覗き、他の受講者がどこで躓いているのか、
それに対してどんなヒントが示されているのかを軽くチェックする。
「あーあれってそういう風にも解決できたの!?」って新しい発見もたまにある。
難しいマシンだと、「もう何日もこのマシンで悩んでいます」なんて書かれていることもよくあるので、
一応どれも数時間でクリアできている自分はやはり良い按配で学習が進んでいるのかなと少し安心してしまう。

急遽来週に鹿児島まで行かなければならなくなったり、再来週には休暇が終わりまた仕事が忙しくなったりと、
これからは腰を据えて勉強するのが難しくなるかもしれない。
しかし出来るだけ1日1台ペースを保っていきたい。。

2020年6月11日木曜日

OSCP学習 #1

2020年4月末頃、会社の上司(趣味が"冒険"のアメリカ人。よくジャングルに消える)から「OSCP受けたい人いたら経費で受けられるよ」と連絡があり、もともと自分で受けるつもりだったのでこれ幸いと申し込み。約10万円浮きました。

OSCPというのは海外のセキュリティに関する民間資格で、サイバー攻撃に特化したハンズオンの試験が行われるなかなか難しいと評判のもの。
試験は48時間あり、最初の24時間で5台のマシンをハッキングして管理者権限を取り、次の24時間でその過程についてレポート(全部英語)を作成し提出するというもの。
うーんめんどくさい。

Kioptrixの記事は#2を書く気力がないのでOSCPの方をメモしておこう。。

----------------------------------------------------------------------------

OSCPはいきなり受けることもできるが、基本的にはラボ利用権を購入し、ラボで学習した上で受験する形になる。
利用権は30日/60日/90日から選択し、その期間内はラボのマシンに攻撃を仕掛けることができる。
また、権利発生初日にテキスト(これも全部英語)がPDFで送られてくるので、それを読んで基礎を学習することができる。

自分は5月9日から90日間で申し込んでおり、6月5日時点でテキスト読了&6月10日時点でラボ4台攻略済みという状態。

----------------------------------------------------------------------------

■テキストについて

850ページ超あります。以前は350ページ程度だったらしいが最近アップデートされたとか。
複数のブログ等では、以前のバージョンでの受験記なんかで「1か月かけて読みました」という記述を目にするが、今や850ページ・・・
全部英語だしふつーに読んでたら2か月くらいかかりそうだぞ。

ということで、まずテキストを機械翻訳。
会社がNDA付きで導入している翻訳サービスを利用。翻訳対象ファイルのサイズ制限によりテキストを8分割して翻訳依頼キューに登録。
翻訳完了通知が来たのが3日後の朝。8つのうち1つは翻訳不可とのエラーだったので、それは更に2分割して再度翻訳依頼。
次の朝には2つのうち1つは翻訳できたので(もう1つはやはりエラー)、そのまま読み進めることに。

内容としては、Bashの使い方やfind, vi, grep等とそれに類する便利なコマンドの利用方法にはじまり、
DNSからのホスト名列挙やポートスキャン等のEnumerationテクニックや、
RFIやSQLインジェクション等のWeb系、Active Directory、ラテラルムーブメント等の技術やツールについてなど、
25章に渡って解説されるもの。
途中途中でエクササイズと称したハンズオンがあり、それをやると理解が深まる。やらなくてもいい。

仕事が忙しかった日や2度の抜歯で悶え苦しんでいた期間を除き、だいたい20日くらいかけて読了した。

自分の場合は、体感的には6割くらいは既知の内容だったものの、Enumerationの知見が広がったこと、
ADやラテラルムーブメント等のRedteam的な部分を多少体系的に理解できたのがよかった。
ただ、バッファオーバーフローについてはもう少し手を動かしてスムーズに実践できるようになるべきだな。

あらゆる技術を実践するにあたり、自分の得意な部分(完全に自力でできること)や不得手な分野(何かを参考にしないと自力でできないこと)を細かく確認できたと思う。

----------------------------------------------------------------------------

■ラボについて

ちゃんと数えてないけど多分50以上のIPがあります。
VPNでラボのネットワークに繋ぎ、任意のIPを攻撃し、管理者権限またはシステム権限を取得し、Shellを得て、特定のテキストファイルを探すという流れ。

IPによってはどうも指定されたテキストファイル以外にも重要情報があるそうで、そこについてはノーヒント。
とりあえず、今のところ自分は指定のテキストファイルだけを探すようにしている。
情報を見つける見つけないよりも高権限のShellを奪うまでの技術習得を優先したいので。

試験本番ではMetasploitやSqlMap等の一部の強力なツールと商用ソフトウェアの利用が制限ないし禁止される。
https://support.offensive-security.com/oscp-exam-guide/#exam-restrictions:-metasploit

理由は「プロセスの自動化ではなく脆弱性の特定と悪用に関するスキルを評価するため」らしい。
ラボ環境においては学習のため積極的にそれらのツールを使うべきとテキストに記載されているとはいえ、
自分はラボでも基本的にそれらは使わないか、使ったとしてもその後に使わないパターンでも攻略するようにしている。

例えば、ラボのとあるIPを攻略するにあたり、どうもSMBがあやしいという時。
Enumerationの結果EternalBlueの脆弱性がありそうだということがわかるも、
カーネルレベルのメモリの脆弱性をネットワーク経由で悪用する(=そのExploitを作れる)ほどの力も時間もない。いやある方がおかしいけど。
Webで見つけたExploitの概要を読んでもピンとこない。
ここで、MetasploitのEternalBlueに関するExploitモジュールを使えばシステム権限のShellをスムーズに取得することはできた。
その後Githubで改めてExploitを見つけ、単発的なコード実行ができることは確認した。
それ単体ではShellが取れないので、「ただファイルを作成するだけ」というPythonのExploitを他で見つけ、FTPコマンドを持つテキストファイルを作成するよう書き換えた。
(1つ目のExploitで繰り返しechoリダイレクトしてもよかったがスマートではないしレスポンス時間に難があった)
自身の環境でFTPサービスを起動し、nc.exeやwhoami.exeをFTP用ディレクトリに準備し、Shell用のポートをlistenしておく。
その後、2つ目のExploitで作成したFTPコマンドファイルを使って、1つ目のExploitでFTPを実行し、自身の環境からexeファイルをダウンロードし、再度1つ目のExploitでnc.exeによるreverse shellのコマンドを実行し、listenしておいたポートでShellを取得。
whoamiで現在のユーザを確認。システム権限であることが明示的にわかったのでdirコマンドでフラグを検索。
これで無事クリア。という流れ

難易度は様々ありそうだけどたしかにKioptrixと似ているものもある。

----------------------------------------------------------------------------

■今後の学習の流れ

来月中にラボを30台以上は攻略し、バッファオーバーフローを完全に修め、準備が整ったと判断できたら試験に申し込むつもり。
契約上は12月頭までに受ければいいことになっているがラボは8月上旬までしか使えないし、8月には受験したい。

今のところ1日1台くらいのペースで攻略できているが、難しいやつにあたると3日とかかかりそうではある。。
Try Harderだぜ!