149
Help us understand the problem. What are the problem?

posted at

updated at

IPアドレスすら分からなかった文系事務員がOSCPを手にするまで

はしがき

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

記事の目的

 本記事は、IPアドレスすらわからなかった著者が歩いたOSCP取得までの過程を残した記事です。

記事の妥当性

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

ペネトレーションとは

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

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

OSCPとは

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

OSCP取得を目指した際の私のレベル

ネットワーク

 ・TCP/IP に関する初歩的なネットワーク知識(CCNAぐらい)

プログラミング

 ・中学生のころに格好つけてC言語をやって、ポインタあたりまでやって理解した気になって風化
 ・OSCPを知るまでに入門サイトでPythonを学習
 ・読みは、日が暮れそうにはなるがリファレンスを参照すれば可能
 ・書きは、無理

サーバアプリケーション

 ・Apacheすら知らない。戦闘用のヘリでそんな名前のヘリがあったなぁぐらいの認識

オペレーティングシステム

 ・Windowsなら操作できる。
 ・Linuxは触ったこともないので、lsコマンド等も知らなかった。黒い画面こわい。

英語

 ・大学は語学部 (語学部があるのは日本ぐらいとよく留学生に言われた・・・)
 ・入学時に取ったTOEIC700点台のスコア
 ・業務でたまに英語の通訳を本職の通訳がいないとき任されるけどできない
 ・業務でたまに英語の和訳業務があるがこれはそれなりにできる
 ・WPMは、簡単な文章であれば200~300程度、難しい文章なら難易度に応じて下降

 さて以上が、当時(2020年12月)の私のスキルセットとなります。どうでしょう?この記事を見ている方であれば、OSCPどんなものであるかはある程度知っていると思いますし「英語は多少ましなようだが、お前よくこれで挑戦する気になったな」と思う人もいると思います。ただ少し別の考えを持った人もいるかもしれません。「IPアドレスすらわからなかったんだろう?それはどうした?」と・・・それについては時系列で説明をしていきます。

旅路のきっかけ

 私がITの世界に入門したのは、職場のネットワークプリンタの設定を任されたところ(2020年7月)から始まります。当時WordやExcelといったものであればほんの多少他人よりイキれたので、その評判からその設定を任されます。当然ながらこの設定にはネットワークの知識が要求されます。IPアドレスやサブネットマスク、デフォルトゲートウェイ等々私の知らない用語が並びます。マニュアルを見ても人間の言葉なのかというぐらい意味が分かりません。「困ったどうしよう・・・イキりすぎた・・・。けどダサいからすぐにあきらめるのも癪だし少し足搔いてみよう。」そう思いスマホを片手に知らないワードを検索します。「IPアドレスとは」「IPアドレス わかりやすく」等々の検索ワードを連ね、気が付けば業務が進んでおらず残業確定でした。
 このままでは非常にばつが悪い結末になりイメージ(笑)が崩れることを恐れた私は、とりあえずパソコンで入門サイトのネットワークの勉強を始めます。一つ一つ丁寧に用語を調べ、頭の中に具体的なイメージを作り、なんとなくこういう原理で動くんだろうぐらいのところまで数日をかけて持っていきました。(このイメージを作るという行為は、私が勉強するときの癖で、自分の理解している都合のいい間に合わせの解釈でうまく筋が通るイメージを作り、ひとたび矛盾するとその筋を徐々に修正し正解に近づいていきます。) 職場には「久しぶりの設定でやり方忘れた」とか適当なことを言ってごまかしてたと思います。(周りも機械音痴で助かった。)
 そして約1週間ほど経過した日、数時間格闘した末にネットワークプリンタを動かすことに成功し、たった一枚の紙が印刷されることにものすごい感動を覚えたのを今でも覚えてます。そしてその功績(笑)を評価され、各種パソコン等の管理を任され始めます。このネットワークプリンタの一件で興味を持ち始めた私は「マスタリングTCP/IP 入門編」を購入し、家で読み始めました。そして、ここから私のITへの本格的な勉強が始まりました。

OSCPに出会うまでの時系列

 以降は、非常に冗長な内容となっています。ですがあえて細かく長く書いています。(本音はそういう風にしか書けません。文章書くの苦手です。ごめんなさい。)この世界に入り実際にマシンを攻略していけばわかりますが、「列挙」という攻撃対象の情報をくまなく収集する行為はペネトレーションにおいて最も重要な行為のうちの一つだと思います。列挙が甘いと、簡単に攻撃個所を見逃し、いくら凄い攻撃手法に精通していようが意味がありません。
 私自身は、その学習法やその学習における知識や技術の検索と攻撃対象に対して行う列挙似ていると感じます。うまく伝えられませんが、攻撃において初期調査から得られた情報をもとに、さらに副次的に「この情報から〇〇が考えられるから、その情報を検索しよう」といったことと、自分に合う学習法や自分が今学習している分野でほしい技術に関する情報を探そうとするのは「目的の情報を探し出す」という点で一致していると思います。ですから学習法を自分で見つけたり、学習に必要な情報を自力で見つけ出すことは、「列挙」の良い練習だと思います。その意味で、本記事の最初の方にそういった機会を失いかねないということもあり「ネタバレ」という表現を入れさせていただきました。またカイジという漫画では「一度正しいと信じるとなかなかそれを疑ってかからなくなる」という言葉があります。最初に述べた通り、私は本職の人間ではありません。よって正確性や妥当性には大いに疑問が残る可能性があります。これ以降は、私のその学習過程に関する内容が含まれ、あなたの今後の学習や思考過程を乱す恐れがあります。よってご自身の判断で読み進めてください。

※内容が自分で読み返したら何を言いたいのかよくわからなかったため、上記の内容を多少書き換えました。 (2022/4/2)

2020年8月頭: [マスタリングTCP/IP 入門編]の1週目読了

 半分ぐらいの内容しか理解できなかった。(布団でゴロゴロしながら)原因を自分なり分析したところ、やはり文字だけではモチベーションが保てず退屈、だから頭に入らなかったと断定する。(根気ないだけ) よって実践的に学習できる方法を探る。

2020年8月頭: 実機による勉強の検討

 とにかく実践的な勉強がしたかったため、手っ取り早く「ネットワーク機材とか設定をすれば覚えるのでは」と思い、実機での勉強のやり方を調べる。ルータやL2スイッチ、各種配線といった機材が必要なことがわかる。お金は出し惜しみしないとしても、どれを買えばいいかがわからず悩む。

2020年8月お盆: CML2との出会い

 ネットで検索を重ねるとネットワークシミュレータという言葉に遭遇する。さらに検索を重ねると、Cisco Modeling Labs 2.0GNS3というネットワークシミュレータがあることを知る。検討の結果、CISCOというどうやらネットワーク機器で有名らしい企業のCML2のほうがサポートとかもしっかりしてそうだしということで、CML2を購読する。

2020年8月お盆: CML2の設定と仮想化ソフトウェア

 CML2は仮想環境におけるネットワークシミュレータで、初遭遇の仮想化ソフトウェアに苦労しながら構築した。またコマンドラインインターフェース(Command Line Interface)もこれが初体験となった。環境構築ができた一方で、勉強をするにしても具体的にルータ等をどう設定して勉強すれば良いのか途方に暮れたため(ミイラ取りがミイラになったような状態)、とりあえずシスコ技術者認定教科書 CCNA 完全合格テキスト&問題集 を購入し、この本に書いてある内容をこの仮想環境で再現しながら勉強していくことにした。ただし資格取得は全く考えてなかった。

2020年9月末: ネットワークの勉強の終焉(早すぎ)

 CML2でSTPあたり (上記の書籍の8章あたり) までの設定ができるようになる。ただ自分の中でやりたいことと何か違うと気が付き、急な方向転換をし始める。(飽き性) 向かった先は、プログラミング。言語は、Pythonを選択。人気があったこと、様々な分野で使えるらしい、ネットワークと親和性があるらしい、とか調べて感じたのが理由。

2020年10月頭: Pythonの勉強開始

 PyQというPython専門のプログラミング学習サイトを使って学習を開始。ヘビのキャラクター(確か名前はQちゃん)がドジでかわいかった。「OSCP取得を目指した際の私のレベル」にあるように、中学生の時にC言語をポインタ・構造体あたりまで勉強したことがあり、一通りのプログラミング言語の概念は朧気ながら記憶していた。Pythonでの変数の扱いを知った時に、データ型の宣言しなくてもよいなどC言語が最初に体験したプログラミング言語であったためで気持ち悪さを覚えた。

2020年11月末: Pythonの基礎文法の終了

 ネットワークの勉強と違い途中で投げ出さず、基本的な文法の学習が終わる。(褒めてほしい) しかし作りたいものも特段なく、また作れる気もしなかったため、またもや別の面白そうな何かを探し始める。(叱ってほしい)

2020年12月頭: 時キタル

 ネットで自分の心に刺さる面白そうな実践的な何かを探す。何を思ったのか「ハッカーになるには」と恥知らずも甚だしく検索を始める。そして、自分の今後の人生を変える本「ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習」に出会う。Amazonのレビューがすごい良くて(小並感)、試し読みからも具体的なハッキング手法が解説されるとあり、読者に要求されるスキルも今までの自分がちょうど勉強してきた知識があれば読み進められそうなものだった。よって、家に帰ったらまず先にパソコンの電源を入れるのと同じぐらいの速さでAmazonのボタンをポチる。

2020年12月初旬: OSCPとの出会い

 ハッキングラボですっかりハッカー気分を満喫しつつ(といってもリバースシェルの理解にすら苦しんでいた。)、セキュリティ関係の資格は何があるのかとネットで検索を始める。とりあえず実践的なことがしたかったので、ペーパーテストではない実践的な資格がないかを検索していると、ついに出会ってしまったのが Offensive Security Certified Professional であった。何も根拠はなかったが「絶対取れる」という自身だけはあった。まだ合格したわけでもないし、勉強をしたわけでもないのにすでに取った気になっていたといってもいいぐらい。


と、長々とOSCPまでの出会いまでの過程を時系列で書いてみました。どうでしょう?「OSCP取得を目指した際の私のレベル」と一致したのがわかるかと思います。長々と書いているのは、若干余計なことを書いている気がしなくもないですが、未経験で素人な自分がどう考えて勉強をしてきたかを知ってもらいたかったからです。今見てみるとだいぶゆったり(少なくとも今の僕の目線からすると・・・マヒしているかもしれません)勉強していたんだなぁと思いますが、強い興味がなければこんなものだったのかもしれません。

OSCPへの挑戦

2020年12月初旬: コンピュータを乗っ取るということ

 OSCPの存在を知り、「絶対この資格を取るんだ!!!」という当時の意気込みだけは確かにすごかった。ただ実際問題として、ハッキングラボを通しても自分の頭の出来が悪く、具体的にサーバを侵害するまでのイメージがなかなかつかなかった。そこで今一度どうすれば「相手のコンピュータを乗っ取る」という行為が達成できるのかを時間をかけて分析したところ、相手のマシンをポートスキャン (Port Scanning) 等で分析し、マシンで稼働しているサービスを列挙、サービスごとにバージョン等を確認し、そのバージョンごとの脆弱性や設定ミスがないか等を確認し、脆弱性や設定ミスを利用して相手方のコンピュータにこちらの意図する行為をさせる、といった手順を進めれば良いのかもしれないということが2週間ほどかけてできた自分の理解だった。

2020年12月下旬: 初めてのマシン攻略

 大体の手順が自分の中で整理できたころ、脆弱な設定がなされているマシンを攻略することで学習することができるVulnHubというサービスがあることをネット検索を通じて知る。そこでVulnHunで(一番)簡単なマシンを見つけるべく、「VulnHub 入門」と検索すると【ハッキングに挑戦】脆弱性が残された仮想イメージ公開プラットフォーム(VulnHub)で練習をするという記事に巡り合った。そこで紹介されていた「Kioptrix:Level1」に挑戦をすることとなる。
 結論から言えば、まったくもってわからなかった。ポートスキャンにおけるサービスの列挙とバージョンスキャンまでは良かったものの、そこから挙がってきたサービスをどういった視点で調査すればよいかが全く分からなかった。結果的には、様々なWalkThrough・Writeup(答え)を見て同様のコマンドを打っていく結果となった。すごく悔しくて、どうすれば各サービスの調査の視点を養えるのかを必死に考えた。けどわからなかった。また答えを見てもなぜこのコマンドを叩いているのかはおろか、何を実行してるのかすらわからなかった。ただ何も得ないで終わるわけにはいかないので、必死に考えを巡らせたところ「各サービスのバージョンがかなり重要でそのバージョンにちなんだ脆弱性をとりあえず探す」ということだけは理解できた。

2020年12月下旬: 学習法を分けた2台目のマシン

 いつまでもくよくよしていても仕方がないので、2台目のマシンを解くことにした。2台目のマシンは「KIOPTRIX:LEVEL1.1」だった。SQL Injection とOS Command Injection という攻撃を組み合わせて初期攻撃を達成するマシンで、今思えばきわめて入門者向けのマシンだったといえる。
 しかしそれはある程度マシン攻略がどんなものかがわかる者にとっての話で、それを知らない入門者が答えを見ないで解けるマシンは恐らく作れないんじゃないかと思う。作っている側は入門者用に作ってはいるが、その入門者とはある程度攻撃の仕方を知っている入門者であって、攻撃手法を知らない入門者が解けるようにはなっていない。考えてみれば当然のことではあるが、初心者や入門という言葉に釣られてここを私ははき違えていたようだ。自転車の乗り方を知らないのに、エントリークラスの自転車レースに出るようなものかもしれない。
 そして当時の自分は、当然ながら全く分からなかった。自転車に乗ろうとしたらいきなり落車した。1台目のマシンと同様に答えを見る。一方で答えがどういった視点でどういった内容のコマンドを叩いているかも理解しようとし、ここで1台目と違うものを感じた。それは、Webという普段から自分も使っているコンテンツに対する攻撃であったため理解がしやすかった気がしたことだった。またその感覚は当たっていた?のか、ネット上の検索によってその攻撃の内容についてある程度の理解ができた。
 2台目のマシンは、権限昇格のパートもあり、ここで初めて権限昇格を体験することになったが当然わからず答えを見た。そして権限昇格は、KernelExploitというOSのコア部分らしい個所の脆弱性を利用して攻撃したということがわかっただけで、肝心の攻撃コードを見てもやっている内容がさっぱり分からなかった。

2020年12月年末: 学習方針の決定

 2台だけしか解いてないがマシンの攻略法として自分の中で以下のように、マシン攻略の大別をした。

・各サービスを列挙して、バージョンを特定し脆弱性を探す。
・各サービスごとにバージョン以外を判断材料とし、攻撃できそうなベクタを探す。

 前者はバージョンを列挙することによって達成でき各サービスについて詳しくなくても達成できるが、後者については各サービスに精通していないと攻撃の糸口がつかめないとも考えた。そこで勉強を重ねるのであれば、まずは後者からだろうという判断する。次にどのようなサービスを優先的に勉強していけば良さそうなのかを判断することとなる。まず考えられるのは、列挙される頻度が高いサービスであることであり例えば、WebやFTP、SSHといった様々なサービスがあげられるとということは当時の自分にも理解できた。次に考えたのが理解のしやすかったり普段から使っていそうなサービスであることだった。これは真っ先にWebが思い浮かんだ。最後に最も重要だと思ったのが、攻撃の糸口が発生しやすいサービスであることだった。これには1週間程度の時間をかけ、その結果としてどうやらWebを起点とした攻撃が一番多そうであるということがわかった。(※) これらの結果から、よく見かけ・比較的理解しやすく・攻撃が発生しやすいWebをまず最初の初期攻撃における勉強のターゲットとすることにした。
 権限昇格については、バージョン列挙による攻撃やWeb等からの攻撃によってサーバ内に侵入できるようになってからの話なので、この時点ではそれらの攻撃に慣れてから学習をはじめることにした。

※現実の攻撃やペネトレーションだと、現代的にはフィッシング等を通じたマルウェアからの初期攻撃のほうがあり得るシナリオだと思います。

2021年1月: Webへの入門

 Webの勉強を始めることとなったが、一体どのように勉強をすればよいかがこれまた分からなかった。Webのみの視点で攻撃を試せるサービスがあればと思い、巡り合ったのがこちらのブログで紹介されていたbWAPPだった。100を超えるWeb攻撃が試せ、まさに自分が理想としているものが幸運にも見つかった。また同時に今後の自分にとっての教科書となるHackTricksというサイトを知ることとなる。日本語での教科書としては「体系的に学ぶ 安全なWebアプリケーションの作り方」を利用した。
 まず「体系的に学ぶ 安全なWebアプリケーションの作り方」を参照したところ、PHPの基本的な理解は最低限必要そうだったので、入門サイトで2週間ほどでPHPでのサイト作成について軽く学習をし、ここで初めてCookieやセッションといった概念を知る。その後同書籍で、XSSやCSRF等のClient-Side Attackからシェル獲得につながる可能性のあるOS Command Injection(こちらはまんまシェルと対話できる攻撃ですが・・・), SQL Injection, LFI/RFI, Insecure Deserialization, File Upload Abusing等の原理を学び、関連する攻撃をbWAPPで試すというのが一つの流れだった。

2021年2月下旬: Web勉強の区切り

 この頃からセキュリティにかける勉強の時間がおかしくなった。毎日セキュリティのことを考え、仕事は即帰りで、眠くなるまでひたすら攻撃の勉強をする。コロナの始まりもあり、休日も同様で外に出なくなった。bWAPPを実行しつつ、そのほとんどが攻略し終える(よくわからないのもありました)と、次にやっていたことは、より高度な攻撃手法の理解だった。具体的にはHackTricksに記載のあるWeb攻撃の項目を上から下まですべてチェックして、その各攻撃を理解しノートにまとめていくというものだった。とんでもない量だったことは今思えば懐かしいが、これがのちのマシン攻略を大いに役立てたことは言うまでもなかった。何より楽しさがその辛さを感じさせなかった。
 Web攻撃の学びのよかったところは、各攻撃がひとつの単元のようになっていて、例えば、Pwn のHeap-Based Exploitation のように実際に問題を解けるまでに必要なプロセスが深くないことだった。各攻撃手法が程よく浅く深く難易度的にも量的にも満足感が得られることが多かったと思う。Heapのように複雑なmallocのアルゴリズムの理解からしないといけないだとかそういうものではなかった。もちろん理解できない攻撃手法も多くあったし、全体的には6割程度の理解だったと思うが、それでもWebにある程度この時点で強くなれたことは間違ってなかった選択肢だと今でも思う。そしてHackTricksにあるWeb攻撃手法も再現が難しいかペネトレーションではなかなか出会わなさそうなものを除いて、ほとんどの読み見通しが終わったため、ここでいったんWebの学習を区切ることとした。

2021年2月下旬: Linux

 Web攻撃の勉強の甲斐があってかWebにはある程度自信がつき、2か月前に解いた(答えを見た)[KIOPTRIX:LEVEL1.1]がとても簡単なマシンと感じるようになる。またこの頃からHackTricksの各サービスごとの攻撃手法にも目を向けるようになった。Web以外のサービスはこれまで勉強したことがなかったが、Webの勉強を通じてある程度のわからない領域での情報の検索の仕方がわかるようになっていた。例えば、「ftp abusing」「ftp pentesting」「ftp pentesting techniques」「site:github.com ftp pentesting cheetsheet」といった具合である。これらの検索による各サイトのcheetsheetをはしごしつつhacktricksの内容を整理し、とりあえず有名なサービスであるFTPやSSH、SMTPといったサービスについては、ノートにまとめていった。
 各サービスについて詳しくなるだけだとと物足りなかったため(webの勉強の物量でマヒしていた)同時並行で、次に課題として認識していた権限昇格にも手を付けることにした。最終的なゴールの多くは、サーバ管理者権限の取得であるため、権限昇格は欠かせないテーマである。一方で権限昇格はサーバ内の探索となるため、各OSについてある程度の知識が必要となる。また情報を列挙するためにすら各種コマンドを実行するわけで、どのようなコマンドがあるかすら知らなかった自分はまずそれを解決する必要があった。(だからリバースシェルすら取り方がよく分からなかった。) そこでLinuxについて勉強を始めることにした。
 とりあえずlsコマンドすらわからなかったため、「新しいLinuxの教科書」を購入して基本的なコマンドやシェルスクリプティングについて学んだ。1週間半ほど読了に時間がかかったとと思う。

2021年3月上旬: 権限昇格

  Linuxに対する知識不足感は否めなかったが、最低限サーバ内で動き回るためのコマンドは理解したので権限昇格を学習することにした。まず最初にudemyでLinuxの権限昇格のコースを購読して、基本的な権限昇格を学んだ。Web攻撃である程度の勉強法は確立されていた為、それが権限昇格になっただけだった。また権限昇格はより攻撃の再現がしやすいため、Web攻撃より勉強がしやすかったと思う。そしてudemyと同時並行でWeb攻撃と同様に上から下までhacktricksのすべてのLinux Privilege Escalationの項目を読み理解した内容や攻撃手法をノートに書き込んだ。Web攻撃に比べれば大した量ではないというおかしな感覚に陥る。

2021年3月下旬: Hack the Box

 ついに今後のお供となるHacktheBoxとの付き合いが始まった。権限昇格の勉強はまだ途中であったが、難しいものを除いた基本的なものは一通り理解していた。HacktheBoxは攻略法が公開されていないActiveマシンと公開されているRetiredマシンがあったため、とりあえず腕試しにActiveマシンから解くことにした。最初に挑戦したマシンは、Easyの「Labotory」というマシンだった。「Easyならこれまでの勉強の成果を見せてやる!!!」と鼻息荒く挑戦したものの、Exploitを指すために自前の環境構築が必要なマシンであったりと全く持ってEasyマシンではなく(Labotoryという名前に偽りはなかった・・・)、Forumで藁にも縋る思いでヒントを得つつ初めてActiveマシンを解いていった。
 一方でWeb攻撃の勉強の成果が目に見えて体感出来ていて、例えばTenet や Ophiuchi の Deserialization、 The notebookのJWT悪用などWebに関するマシンはノーヒントで解くことができていた。そしてフォーラムのヒントにかなり依存はしていたが、すべてのEasy と Medium が解き終わり、残りはHardとInsaneのみであった。ユーザのレビューからわかるようにEasy MediumとHard Insane には越えられない壁のようなものがある。初めて手を付けたのは、Sinkであったが、初期攻撃の部分はなんとノーヒント※でクリアに成功する。攻撃はHTTP Desync AttackというHTTP Request の区切りに関するbackendとfrontendサーバの解釈の違い(イメージ的には、異なる攻撃ですが、似たものとしてURIの解釈の違いの悪用するもの(リンク)があります。)によって生起する攻撃を悪用したマシンだった。HTBはマシンの名前がヒントになっていることもあり、当時このSinkとSyncからDesyncかもということは、マシンの中にちりばめられていたヒントからある程度想像ができた。Sinkが攻略し終わると、次に解いたのがTentacleという凶悪なHardマシンだった。とにかくこのマシンでは初めての要素だらけだった。例えばDNSに対する列挙すら初めてだったし、squidを利用したと内部ネットワークのスキャン、wpadをヒントにしたネットワークスキャン、LinuxにおけるKerberosサービスの悪用など明らかに今の自分にはレベルの高いものだった。1週間半かけながら泣きながらクリアし、ついにランクがPro Hackerとなる。

※フォーラムのヒントのことです。(2022/4/2)

2021年4月下旬: サーバ構築の開始

 ProHackerランクになってある程度課題を感じていたことがあった。それは、サーバ周りの知識が足りていないことだった。また攻撃手法だけに精通してもダメだと思った。TentackleでのDNSサーバの一件もあり、ここで主要なサーバを今後の検証環境構築の意味合いを含めて練習することにした。また実際にサーバを構築し機能させることでより理解を深めたかったこともある。構築の勉強に費やしたのは約1か月で、Web, SMTP, DNS, Samba, LDAP, Kerberos サーバの構築を行った。DNSサーバに関しては、「DNSがよくわかる教科書」、Samba, LDAP, Kerberos サーバの構築ではプロのためのLinuxシステム・ネットワーク管理技術を用い、Web, SMTPはネットにある情報で構築をした。世の中はちょうどゴールデンウィークだったが、めんどくさければ出前を頼み、コンビニに行く以外は外に出ず、すべてをサーバ構築にあてていた。コロナでの過ごし方としては正しかったかもしれない。もちろん構築といってもただ起動するだけでなく、各種設定ファイルの理解等を実施した。結果的には、特にKerberosサーバの構築やLDAPサーバの構築は、のちに重要となるActive Directoryの理解を大いに助けることとなった。またLinuxにおいてKerberosサーバを構築するというレアな経験?もでき、今後自分で何らかのサーバ環境を構築しなければならない場合におけるサーバの構築法や設定ファイル、ドキュメントの見方等(OpenLDAPとKerberos構築の際にかなり見た)にもこの段階で大分慣れることができた。

7月: Linux Retried マシンの攻略

 諸事情により勉強を中断せざる負えなくなったことがあったものの、勉強を再開した。サーバ構築の経験したため、あとはひたすらマシンを解くことだと思い、LinuxのRetiredマシンのEasy Mediumを40台程度を解いた。中にはWriteupを見ないとわからないCarrierなどのマシンがあったが、多くのマシンでWriteupをみずに攻略ができていた。

8月頭: Windowsマシンの攻略

 8月には、これまで手を出してこなかったWindowsマシン20台ほどに手を出した。権限昇格は、同様にHackTricksにあるPrivilege Escalationの項目を上から下まで読んで理解しノートにまとめた。このほかにWindowsでのリバースシェルの張り方やクレデンシャルの再利用の仕方などLinuxでやっていたことをWindowsではどのようにするのか?という点で勉強を重ねた。またWindowsは、Linuxに比べて小難しい話が多く、認可制御一つでもLinuxの読み書き実行といった単純さとは少々異なったため、主にWindowsの仕組み(特にAccess Token, Integrity Level, NTLM hashなどの認可認証回り)を理解する方に時間がかかり、権限昇格自体はLinuxと共通する点が多かったため思いのほか楽だった。

9月中旬: Active Directory

 WindowsにはOSの理解とPrivilege Escalation以外にもう一つ理解しないといけないことがある。それがActive Directoryに関する攻撃体系で、これはある程度範囲が広く、実際にActive Directoyを触れながら出ないと理解できない項目が多くあった。一方でActive Directoryで且つ難易度が優しめなものはあまりなかったため、HTBではそれらのマシンはかなり丁寧に解いた。具体的には、Active, Resolute, Monteverde, Saunaである。Kerberosの仕組み自体は、サーバ構築の際に理解をしていたので詰まることはなく、PowerviewやBloodHoundといったAD攻略でお供となるツールの使い方を覚えるのがメインだったかもしれない。


 このような学習過程を経て、各種サービスにおける攻撃、Web攻撃、Linux LPE(Local Privilege Escalation), Windows LPE, AD Pentesting(これは少しだけ)といった一通りの学習が終わります。このほかにExfiltration(ファイル等の輸送のテクニック)やPivoting(踏み台サーバからさらに内部ネットワークの移動に関するテクニック)等や基本的なBoFも同時に学ぶことができました。さて勘の良い方は思うでしょう、「ここまで準備したらPWKの意味がないのでは?」と。もちろん結果的には、PWKでは学ぶことが少なくなりました。Linuxマシンについては正直に言えば学ぶことは0だったと言えます。一方でWindowsマシンではいくつか学ぶことがあり、決して0ではありませんでした。
 またはっきり言えば、HackTricksのWeb攻撃やLPEを上から下まで全部見て勉強するなんて言うバカなことをしなくてもOSCPの試験は受かる試験ですし、大半がPWK・OSCPの範囲外です。ただ一方で自身自分で情報を探し自分で学び取っていき、教授されるばかりの学習スタイルには依存したくなかったという理由もあります。今後より高度な世界に足を踏み入れることになる場合、PWKのような丁寧でわかりやすいコンテンツはおそらくないでしょう。自分でドキュメントを見たり、自分で実験をして、自分で何かを学び取らないと前に進めない世界ばかりになると思います。その意味で私の取った方法は間違いではないのかなぁなんて自分には言い聞かせています。さらに言えば、時間に追われながら理解の進まないところを放置するのを避けたかったり、70台あるというPWKのラボマシンを私は楽しみながら挑戦したかったという理由もありました。単純にビビりでもあるんですが(ボソ)

PWK

 PWKについての攻略過程については、記述するか悩みました。というのもある程度スキルがあることがわかっており、なんとなくここまで読んでくれている方も展開が読めると思うからです。一方でまったく書かないのも、ここまで長文の記事を書いておいてなんかムズムズしたので簡易的な内容ですが書くことにしました。

10月中旬: PWK開始

 
 PWKは、30,60,90日コースとあり、その期間を使ってラボに展開されているマシンを侵害していきます。30日では、さすがに全部のマシンを攻略しきる自信がなかったのと、60日と90日ではあまり金額に差がなかったので、90日コースを私は選択しました。またPWKでは、850ページにも及ぶPDFが配られます。基本的には、このPDFを通読し各種攻撃手法を学び演習をクリアし終えたら、ラボネットワークに挑戦していくというスタイルになります。ですが内容がほとんど既知なこともあり、書かれている英文も小難しい文ではなかったため、1週間程度で通読しラボ攻略に向かいました。(OSINT系などの正直に言えばすべて読み飛ばしても構わないと思えるような章もいくつかあります・・・。)
 PWKのネットワークには、まずPublicという直接攻撃者のマシンからアクセスできるネットワークがあります。これらのPublicネットワークのいずれかのマシンが奥のネットワーク(IT, Dev, Admin)とつながっていて、そのマシンを踏み台にして内部に侵入をしていきます。マシンの数は、特定のものを除き70台存在し、その半分以上がPublicネットワークに存在します。あまりラボの内容については言えないので詳細は控えますが、戦略としては、まずは片っ端からPublicネットワークにHost Discovery(ホストを検出する行為)をして、そのうえでポートスキャンを実行し、IPアドレスの若い順から無差別に攻撃をしていきました。中にはラボを攻略していく中で後で戻ってきて攻略できるものも何台か存在します。よって実際のペネトレーションテストのように?単にマシンを侵害するだけではなく、侵害した後にクレデンシャルを集め、それが再利用されているケースに備えて管理しておく必要があります。

11月上旬: Public Networkの掃除が終わる

 攻略できそうなPublic NetWorkの掃除があらかた終わり、他のネットワークへの入り口も見つけています。さらに内部ネットワークを侵害し攻略可能なマシンの侵害があらかた終わります。残りは、Post Exploitation(具体的な意味合いでは、侵入・侵害後のクレデンシャル・システム情報などの収集行為等を指すことが多いと思います。)で得られたクレデンシャルを再利用して以前は攻略できなかったマシンに認証を試行していく形となります。ただ私はこの過程は少々めんどくさく感じフォーラムを見て、そのようなマシンを判断することにしました。(今考えると現実でこんなことやってたら仕事ができないと思います。)

11月月末: 全てのマシンの攻略が終わる

 正確に覚えてないですが大体45日ほど経過したところで70台すべてのマシンの攻略が終わりました。試験の日程は今すぐにでも組める状態でしたが、とりあえずゆっくりしたかったため今すぐに試験の日程を組むことはやめました。

12月頭: 試験様式の変更

 ここで急遽OSCPの試験の内容が変更されるというビックニュースが舞い込んできます。これにより12月中には新たに試験の日程を組むことができなくなり、翌年の1月13日以降の新試験の日程からのみ組めるようになりました。

 これまでOSCPは5台の単独のサーバが用意され、

・BoF:25, easy:10, medium:20*2, hard:25

 の計100点の構成で70点を獲得すれば合格というものでした。

 翌年からの新試験では、

・Active Directory:40, Medium:20*3

 の計100点で70点を獲得すれば合格というもの変化しました。

 各Mediumの単独マシンは、FootholdとLPE パートで10点が得られるようになってますが、AD環境は完全に攻略しきらないと40点が付与されず、つまり部分点が一切ないことを意味します。万が一AD環境の攻略に失敗すると、Mediumマシンをすべて完全に侵害しなければならず、且つラボレポート(10点)を提出する必要がありました。マシンの攻略には相当自信があったため、当初はラボレポートはやらない予定でしたが、何が起こるのかはわからないのが試験なので急遽ラボレポートを用意することにしました。幸いPWkの時間はまだ40日ほどあります。

12月月末: ラボレポートの完成

 12月の中旬あたりから2週間ほどかけてラボレポートを作成し、ページ数は260ページほどに及びました。特段演習のラボレポートでの報告の仕方について規定はありませんが、下手に手を抜いて点数が付与されないことは避けたかったため、ほとんどすべての演習のスクリーンショットを撮影し貼り付け、解説を入れました。もう二度とやりたくありません・・・(笑)ラボレポートが完成した後は、試験日まではOSCPとは全く関係のないことをやってました。具体的にはPwn のHeapとかそこらへんの勉強をしていました。
 ちなみにHeapを勉強する際にいつものように検索をかけていたら、急に変なメッセージが出て(内容が思い出せません・・・)から画面が暗転し謎のターミナル画面(リンク)に連れていかれるということがありました。調べてみるとGoogleからのちょっとしたプログラミング問題の招待サイト?みたいです。こちらのブログに詳細があります。ブログにおける画像では「mutex lock」という検索ワードで引っかかっていることがわかります。Heapを勉強したことがある人であれば、なんとなくどんな検索ワードでフラグを立てているか想像がつくと思います。またおそらく日本語の検索では、このサイトへの招待はされないと思います・・・日本語での情報がほとんどないわりに海外の記事では情報はたくさんあったし、自分も普段は検索言語は英語にして検索をかけていて、その当時その設定でmalloc等のアルゴリズムを解説している海外記事を検索しまくっていました。気になる人は調べてみてください。

foobar.png

試験当日

 ぶっちゃけていえば、正直「この日をどんなに待ちわびていたか!」という気持ちで緊張は一切ありませんでした。とにかく早く試験をやりたいという気持ちしかありませんでした。そしてこれまでの自分の力を十分に発揮するという考えしかありませんでした。ですがこの気持ちは数時間後、一変します・・・

試験開始から6時間後

 おかしいです。予想ではもうActive Directoryの攻略が完了しているはずです。しかしあろうことかイニシャルシェルがとれません。というか取れる箇所がわかりませんでした。私は絶望に震えました・・・(笑)カイジを知っている方であればわかるかと思いますが、「ぐにぁぁぁぁぁ」というまさにあんな感じです。
 何かしらの異常が起きているんじゃないかと思い、マシンをリセットし再度ポートスキャンをかけて念入りにスキャンを書けます。UDPへのスキャンや複数のWordlistの使い分けも忘れていません。でも何も見つからなかった・・・一体入り口はどこに・・・?ぐにぁぁぁぁぁぁ

試験開始から8時間後

 ADの攻略はひとまず諦めて、残りの単独マシンをすべて攻略することに切り替えます。しかし完了しているスキャン結果を見て唖然しました。これも全く手がかりがありませんでした。「おいおいこんなことありえるのか?」と思いつつも、Revertを重ね再度スキャンの繰り返しをしてCheetSheetをもう一度見直して確認漏れがないかを確認します。今までPWKやHTBは何の問題もなく使えていたCheetSheetです。手塩にかけて重くなって分割する羽目になったぐらい作り込んだCheeryTreeのCheetSheetが全く機能しませんでした。

試験開始から12時間後

 まったく糸口がつかめませんでした。計画ではもう合格点は確保していた時間帯です。ですが点数は0点・・・「一体何が起こった」とたぶん大仏のような顔をしていたと思います。

試験開始から13時間後

 自分の計画では、「文句なしで絶対合格するぞ!」というはずが、試験時間が半分を過ぎても0点のまま・・・そして休憩は挟んでいたといえど13時間も続けて作業をしていた私はそろそろ眠る必要がありました。2時間~3時間程度寝たとして、残りの猶予は8時間~9時間、1時間~2時間は検証に時間を充てるから実質的な猶予は6時間~7時間でした。これを考えた際に、一気にあきらめムードが脳内を駆け巡り、ここで私自身の気持ちが折れてしまいます。自ら試験を終了したいと告げ、こうして私の1回目の試験は0点で終わるのでした。

第1回目の試験後

 1回目の試験の失敗が悪夢のように感じました。0点という不甲斐無さすぎる結果に、落ち込むを通り過ぎて「何が起こった」とポカーンとしていたのを覚えています(笑)ただ結果は結果で、この0点を取ったという事実と向き合わなければなりませんでした。しかしどう向き合えばいいか全くわかりませんでした。PWKでもHTBでも順調にマシンを解いてきたのに、ここにきて全く解けずに終わるという悲しい結果・・・自分のCheetSheetに全く引っかからなかったという現実が、私自身をどう改善すればよいのかという問いの森に迷わせます。
 不合格の日から何日か経過して、OSCPのRedditを確認していると、私と似たように多くのマシンの経験をしPWKを購読し試験に臨み同じく0点だった受験生を見つけます。運のせいにしたくはありませんでしたが、多少は「もしかしたら・・・」なんて思ってしまう自分がいました。一方でいつまでも何もしないわけにはいかないので、HTBの新しくRetirdedになったEasyなどのマシンを初心に戻ったつもりで解きました。そしてこれらは不思議と解けました。
 投稿の内容が知りたい方は、「failing_the_oscp_and_my_thoughts oscp reddit」「just_failed_the_exam oscp reddit」で検索してみてください。記事にはリンク張れませんでした。

Learn Unlimited

 いずれにせよ再受験の日程を組む必要があったため、再試験の権利を購入しようとしたところ、Learn Unlimitedという無制限で1年間すべてのコースにアクセスし放題というサブスクリプションが目に留まります。試験費用もすべて含まれていて無制限に受けられるということで、すっかり弱気になっていた私はこのサブスクリプションを購入することにしました。ただ一見すると企業用のサブスクリプションのようで、購読するには直接Offsecのコンサルタントと話をして購読する必要があったようなので、サポートの問い合わせから個人でも購読はできるのか?と問い合わせたところ購読できることがわかり、後日google meetsでコンサルの人と話をして、その場で電子契約にサインをして購読しました。価格は60万円ほどしましたが、普段から大きい買い物をしない私からすれば、この額は自分の好きなことへの支払いであったこともあり一括即決で購読しました。結果的には割引などを受けられもう少し安い値段で購読することができました。またいずれにせよOSCPに合格したら、すぐにOSEP,OSEDと計画をしていた為、この価格はあまり気にしていませんでした。

OSEP

 購読を完了すると、アカウントをOffsecのTrainng Libraryというプラットフォームに移行する必要があるらしく数日待ち移行が完了し、その後からコンテンツにアクセスが可能になりました。文字通りOSEEのコンテンツを除くすべてのコンテンツにアクセスし放題で、最新のEXP-312やSoC-200のコース資料もすべて根こそぎダウンロードできます。まるで大量の・・・な本を見つけたかのような感覚でした。私は、特にOSEPの内容についてかなり興味があったためコース資料を軽く見るつもりで読んでみました。そして気が付けば100ページぐらい読んでいました。「OSCPも合格してないのにOSEPかよ?」と思われるのは至極当然の反応ですが、あまりに興味深い内容だったので「正直OSCPは後でもいっかな!いつでも受けられるし!」と生意気になります。

ツール開発の始まり

 コース資料を読み始めてからというものの、先が気になりすぎて最低限のBox攻略をしてあとはOSEPの勉強をしていたと思います。様々なツール開発をしていく過程がすさまじく楽しくてOSCPを忘れるところでした。本当はもっと書くことがあるのですが、本記事はOSCPの記事なためOSEPの内容はこれぐらいにしておきます。

2022/4/11

OSEPに合格したため、OSEPの記事を書きました。

第2回目の試験当日

いよいよ第2回目の試験が始まります。Proving Groundと呼ばれるOffsecのHTB版のようなサービスでのマシン攻略以外には特段の準備はしませんでした。あれだけ多大なコストを払って作り上げたCheetSheetを作り直すことは考えられなかったため、「これでだめだったら作り直そう、そうでなければ何かの間違いだ」ぐらいの気持ちで特に手は入れず1回目と同じ状態で試験に臨みました。

試験開始から2時間後 : AD Set の攻略

 1回目と同様にAD Setの攻略から挑戦しますが、1回目とはうってかわって十分な列挙をせずとも簡単に攻撃ベクタが見つかりものの数十分でイニシャルシェルが取得できます。ここからの内容はAD攻略の内容にかかわるので具体的には書けませんが、AD Setに手を付けてから2時間程度で AD SetのFully Chained Exploitationが達成され、40ポイントが振ってきました。 あまりの簡単さに、1回目の試験と同様に変な違和感を覚えましたが、少なくとも今回は悪くない違和感のようです。

試験開始から3時間後 : 単独マシンAの攻略

 ポートスキャンの結果から列挙されているポート数が少ないマシンが攻略しやすいため、そのマシンであるAを攻略することに決定しました。簡単な列挙ですぐに攻撃ベクタが見つかり、イニシャルシェルまで50分程度だったと思います。その後、権限昇格では具体的には言えませんが、明らかにOffsecの想定外の解法だろうというもので5分程度で権限昇格が終わりました。

試験開始から5時間後 : 単独マシンBの攻略

 ポートスキャンの結果から次に攻略しやすそうなマシンであるBを攻略することに決定しました。これは少し十分な列挙が必要でしたが攻撃ベクタが見つかり、イニシャルシェルまで1時間程度だったと思います。その後、権限昇格はちょっと意地悪な制限があったようにも感じますが、これまでのHTBでそれらの制限については知っていたものだったので、1時間ほどかけて権限昇格を完了します。

試験開始から6時間後 : 単独マシンCの攻略

最後のマシンは上がっているポートの数が多く一番めんどくさそうに見えましたが、結果的にはこのマシンが一番簡単でした。すぐに攻撃ベクタを特定し、40分程度でイニシャルシェルをとりました。権限昇格は、またもや想定外と思われる解法で数秒程度で権限昇格が終わりました。

試験開始から8時間後 : 試験の終了

 結果として、1回目の試験とはうって変わりたったの6時間ですべてのマシンを完全に侵害することができました。1回目の試験と2回目の試験の差がありすぎて、どっちの試験も不正な試験に見えてしまう自分がいました・・・(笑)あとは2時間程度で各種スクリーンショットをとり、正常に再現されることを入念に確認して、試験官の人に試験終了希望を伝え試験が終了しました。唯一不安だったのが権限昇格の想定外の解法によるところでしたが、AutoExploitationではないし、攻撃自体はある意味で複雑なものだったので、PWKの受験生(ましてや前回0点の(笑))がこれをExploitするとは思わなかったんだと思います。一方で現実世界でこれを悪用しない攻撃者はいないだろうというものだったので気にしませんでした。仮に0ポイントだとしてもラボレポートと他の80点の得点があったこともおおきかったと思います。

レポートと合格の知らせ

 想像以上に試験が早く終わってしまったため、とりあえずYoutubeでクレヨンしんちゃんを見ながら、ダラダラとレポートを書いていたと思います。大学では語学部で卒論等は基本的に英語でしたし、レポートも英語だったためAcademic Writingの心得もあってか、ドラフトは3時間程度で書き終わりました。ページ数は80ページほどだったと思います。そしてレポートの提出期限から約20時間後ぐらいだったと思いますが、Offsecから合格の知らせを受け取り、私のOSCPの旅路が帰路につくこととなりました。

OSCPのレベルと現実

 さて合格は良かったのですが、ここで一つ気になることはありませんか?もしかしたら一つではないかもしれません。ですが当時の私が抱えていた疑問をここで一つ自分なりにこたえてみようと思います。その疑問とは「OSCPのレベルは現実世界でどの程度のもの?」というものです。
 今現在の私のスキルセットの一つの目安としては、HTBのマシンを100台上解き、PWKでは70台を解いています。つまり約170台ほどのマシンを解いてきた経験になります。じゃあ高難易度のマシンがスラスラ解けるのか?とか現実のペネトレーションに通用するのか?と言われれば、答えはNoです。
 高難易度のマシンには、単にサービスを列挙してWebから攻撃すれば良いという単純なシナリオで終わらないことが多いです。マイナーなサービスを悪用して攻撃をしたり、より高度なWeb攻撃をチェーンさせて攻略しないといけないものがほとんどです。さらに言えば、自作プログラムと思われるバイナリがあった場合には、それ解析してその結果としてのメモリ破壊をしてコードを実行するといった一連の低レイヤ知識が要求されることが増えてきます。そしてこれらのシナリオは、現実でも起こりえると思ってます。例えば、見たこともないプロセスが高い権限で動作していることとわかったら、解析をしてメモリ破壊からコード実行にChainさせることはできるのか?といった発想はすると思います。高い権限でなくても何らかの自作プログラムであれば、クレデンシャルがハードコードされている可能性に期待をして解析をするかもしれません。はたまたクライアントの環境がそれなりに構築されていて簡単に侵入できそうにない・・・けど仕事としてはやはり侵入技術をある程度見せる必要があると思いますし、となるとクライアントの環境を観察したうえで一般的に認知されているサービスにも解析を行い、糸口がないかを探そうとすることはあるのではないか?と未経験ではありますが勝手に著者は考えています。
 また現実には様々な防御機構が存在します。例えば、標準的なシグネチャ型のAVを始めとして、Well-Configured FirewallやWAFの存在、ネットワーク型・ホスト型のIDSやEDRなどの侵入検知システム、Applockerなどを始めとしたアプリケーション制御、人間やシステムによるログ監視などなど枚挙をすればきりがありません。そしてこれらはすべて、OSCPのレベルではオフとなっています。しいて有効になってるのは一部のマシンにおけるFirewallぐらいでしょうか?よって現実ではこれらの防御機構を回避しつつ目標を達成する必要があり、それは困難を極めそうだということがわかると思います。
 あなたはなんとか初期マシンを完全に侵害し、そのマシンを踏み台として内部ネットワークのスキャンを試みました。しかし次に待っていたのは、スキャンの結果ではなく、となりの先輩テスターに頭を小突かれるというものでした。「でかい音を立てるな」と、当たり前ですが現実では様々な監視が動いています。テストのシナリオにもよるとは思いますが、いきなりでかい音を立て侵入者が自ら「俺はここにいるぞ、かかってこい」というような行為はふつうしないでしょう。私は、職場で.NETの力を借りて特段の管理者権限が必要ない状態でも、HTTPによって遠隔のコンピュータのシェルと対話できるプログラムを作りました。そしてEDRに検出され、情シス部門に驚かれたのと同時に怒られました。このように現実は甘くありません。
 またペネトレーションは楽しく見逃されがちですが、忘れてはならないことがあります。それは仮想と現実の差です。まず我々が今行っている学習の段階では、脆弱性や設定ミスなどの攻撃の起点が必ずあるということがわかっていることです。これがあるとないとでは大きな違いがあります。現実では、そういった攻撃ベクタが本当にあるのか?とまるでスイカ割りのように目隠しをして疑心暗鬼になりながら攻撃ベクタを探す必要があります。学習の段階でこれはなく脆弱性があるとわかっているからこそ「なんとなくここかな」というものがあります。また現実では、何か不具合が出たらRevertするなんてことはできませんし、不具合を出したらクライアントの顔も渋くなるでしょう。そして次から仕事が来なくなるかもしれません。自分の実行する行為がクライアントの環境でどう作用するのか?なんて想像しながらペネトレーションの学習をしていましたか?おそらく入門者にはそんな余裕はないでしょう。(もちろん僕もありません) ですが本職の方々はこれをしっかりしているでしょう。
 あなたは認可制御が甘いフォルダを見つけ、DLL Hyjackなど行い権限昇格を試みようとしています。しかしあなたは肝心のサービスを再起動することはできません。よってWindowsのマシン自体を再起動をすることによってStartupによる権限昇格を試みます。しかしよく考えてみてください。実際の侵入者であれば、サービスの再起動といった生身の人間を警戒をさせるような選択肢をすぐにとるでしょうか?できればユーザ側のインタラクションで自然に再起動されることを望むはずです。勝手に再起動をしたらサービスが接続できないことに気が付かれテストが失敗するかもしれません。テストが失敗するだけならまだしも、マシンを再起動してサービスが壊れてしまったらどうしますか?攻撃者であればそんなことはどうでもよいですが、仕事としては大失敗に終わるでしょう。それとも再起動によらない別の方法を探しますか?

これからの自分

 さて長々と書いてきた自分語りもこれで最後です。今後の私のキャリアについてお話します。私は、今現在もなおただの事務員です。「そんな事務員いるか?」という方もいると思いますが事務員です。転職は考えていますが、そういう意味のキャリアについてではありません。セキュリティの世界でどういった分野に今後入っていくか?ということです。
 OSCPを通して、基本的なペネトレーションの技術は学んできました。今後はLearn UnlimitedでOSEP,OSED,OSMR,OSWEの順での受験を考えています。OSEPは現在まさに挑戦中でコース資料は終え、用意されているチャレンジのうち1つの攻略が完了しており、近いうちに試験を受けるでしょう。OSEDは、Exploit Developmentですがその内容はStack-BasedのALSRとDEPの回避になります。今の私自身のPwnのスキルセットは、基本的なx86/x64におけるStack-BasedのASLR,NX,Canary Bypassは知っていて、R2LやGot Overwrite,R2Pなどについてもある程度の実践と理解があります。もちろんプラットォームはLinuxなので、Windowsとはまた違うところがあると思うのですが、基本はASLRとDEPだけの話なのでそう話は難しくなさそうなのかなと考えています。Heap-BasedはOSEEのレベルみたいでOSEDでは出てきません。OSMRはMacでのExploit Developmentみたいですがこちらについては全くの未知数でよくわかってません。ただLearn UnlimitedかLearn Oneでしか購読できないコースなので確実に受ける予定です。そして最後のOSWEですが、個人的にWebに関する攻撃は公開情報でも豊富な情報が転がっていて自力で攻撃手法を取得していけそうなのと内容がホワイトボックスなので優先度が低めです。
 また現在のOSEPで開発しているツールの改良を進めていこうと思っています。一番の大きな理由は、自分自身のプログラミング能力を鍛えるためです。プログラミングの何が難しいって作りたいものを見つけるところだと思います。今の私にとって作りたくて作ってるものが、まさにこれらのツールとなります。OSEPのツール開発では、否が応でも数多くのWinAPI等の対話することになり、高度なツールを作ろうとするとRPCやCOMといった仕組みにも触れていくことのなり、場合によってはドキュメント化されていないAPIの使い方等にも踏み込んでいく必要があります。どれも一筋縄ではいきませんが、Windowsにおけるこれらの要素はペンテスターを志すとして者として知らないわけにはいかないとも思っています。Windowsは現代の様々なシステムで使われていて、ペネトレーションのシナリオで一番よく目にするOSだと思います。だから今のうちからWindowsというシステムと仲良しになっていくつもりです。
 また余力があれば、CTFの方にも本格的に足を踏み入れる予定です。主に分野はPwnとRevの低いレイヤに向かっていきたいと考えています。やはりWebの技術やOSなどレイヤーが異なる話を理解していく中で、自分は低いレイヤーが好きだと思ったからです。場合によって、ハードウェアのレベルまで降下し、電気等の物理に関する理論も学ぶ必要が出てくるかもしれません。ただこういった趣向があるため、CTFではなくコンピュータの原理に近づくとかといった意味で自作OSだとかそちらの方に流れるかもしれません。これはガイドでも触れていますが、攻撃ばかり学んでいてもよいのか?という迷いからもきています。

最後に

 ここまで読んでくれた人には感謝しかありません。こんな駄文で長文によく付き合ってくれたと思います。けどわかっています。いきなりここを見たあなたのことです。残念ですが小説のように素晴らしい結末は書かれていません…冗談はさておき、この記事で僕と同じくOSCPを志し、多くの人がセキュリティの世界に足を踏み入れてくれることを願っています。
 もしももっと具体的に聞きたいところがあれば、Twiiter で DM をください。回答が可能な範囲内でお答えします。

関連投稿

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
149
Help us understand the problem. What are the problem?