セキュリティ専門外のJavaエンジニアがTryHackMeで日本人100位になるまで

小坂と申します。主にバックエンドのJavaプログラマ・SEとしてごはんを食べています。
セキュリティの勉強のためにはじめたTryHackMeで日本人100位になったので、到達するまでの話を書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171706/358d73f8-77fa-1ee7-059b-fb2deaf9c23d.png)

# お断り
煽り気味のタイトルですが、最初に申し上げておきます。
**日本人100位といっても大したレベルではありません。**
のちほど記載するTryHackMeのハンズオンやCTFを地道に進めていけば、ポイントが貯まっていき、
そのポイントの累計がランキングに反映されます。
私のようにセキュリティ専門外の人間でもこのレベルであれば時間をかければ到達可能ですし、
何よりまだセキュリティスペシャリストとして全く通用しないレベルだと自覚しています。

とはいえ、一旦日本人100位という地点を中間目標としていたところでもあるので、まとめることにしました。

# 自己紹介
35歳のJavaプログラマ・SEです。
これまでは主に業務系アプリケーションの開発や保守・運用をやってきました。
開発したアプリケーションのセキュリティ観点でのテスト等を行うことはありますが、
脆弱性診断やペネトレーションテストなどセキュリティに特化した仕事の経験はありません。
**nmapやBurpSuiteなど、何それ？というレベルでした。** Metasploitに至っては聞いたこともありません。

どうしてもセキュリティの知見を深めたいという思いがあり、
情報処理安全確保支援士の勉強を進めていました。
が、勉強を進めるうちに「これもし受かっても**全然手を動かせない情報処理安全確保支援士**で役に立つのか？」という危機感が高まり、
たまたま見つけたTryHackMeが目に留まりました。
# TryHackMeについて
[TryHackMe公式](https://tryhackme.com "TryHackMe")
実際に仮想マシンにハッキングを行い、サイバーセキュリティの学習やトレーニングができるサービスです。
ユーザー数は2022年6月時点で114万人ぐらい。私が始めた2月時点では90万人ぐらいだったので、かなり急速にユーザー数が伸びていますね。
ハンズオン形式でツールの使い方や侵入の仕方が学習できるWalkthrough、対象サーバのroot権限奪取などの課題が設定されたCTFがあり、実践的にサイバーセキュリティの学習ができます。
分野ごとに必要な学習コンテンツがまとめられたLearning Pathというセットも準備されています。
無料でも登録できますが、いくつか制限があるので私は課金しています。金額は月10ドルです。
攻撃元のマシンは自分で準備してVPN経由で接続するか、TryHackMeが準備したKaliLinuxの仮想マシン(AttackBox※)をブラウザで操作するかの2択になります。
AttackBoxは無料プランの場合、1日1時間しか使えません。
私は基本的にはAttackBoxで攻略していますが、たまにAttackBoxが重くなるのでVirtualBoxのKaliLinuxからVPN接続をすることもあります。
# 2022年2月～3月
2月中旬にTryHackMeの存在を知り、まずは一番基本的なLearningPathの「PRE SECURITY」から学習を始めました。
この時期は情報処理安全確保支援士の勉強と並行で、1日1～2時間ぐらいやっていたと思います。
「PRE SECURITY」はセキュリティ以前のLinuxの操作方法とか、OS、Webやネットワークの基礎知識がまとまったものです。
内容的にはほとんど知っていましたが、英語に抵抗があったのでいいリーディングの練習になりました。
目安は24時間となっていましたが、たぶん30時間ぐらい以上かかっています。原因は英語の読みの遅さです(汗)。
「PRE SECURITY」が終わったら「COMPLETE BEGINNER」のLearning Pathに着手しました。
「COMPLETE BEGINNER」は実際に(後から考えるとかなり簡単なパターンの)マシンをハッキングする手法を学習します。
このあたりでハッキングに必要なツール、nmapやgobuster、John the Ripper、hashcat、BurpSuiteなどに初めましての挨拶をしました。
列挙後に設定ミスや脆弱性を突いてイニシャルシェルを取得し、特権昇格を行うといった流れを学びましたが、後から考えるとこの時点ではあまり理解できてなく、実際に頭の中で流れが整理できたのはもう少し時間が経ってからになります。
とはいえ、ツールの基本的な使い方、コマンドなどは自分のチートシート(というよりメモ)にまとめていきました。
元々Webアプリの開発でブラウザの開発者ツールは日常的によく見ていたので、BurpSuiteはあまり抵抗がありませんでした。
# 2022年4～6月頭
情報処理安全確保支援士の受験日が近づいてきたので、2週間ほどTryHackMeはお休みをして、再開しました。
この時期は「COMPLETE BEGINNER」が終わって「Web Fundamentals」をこなし、終わったら「Jr Penetration Tester」に取り組みました。
ただ、このころハンズオン学習だけでなくマシンを自力攻略したい欲にかられ、時々LearningPathから離れてEasyレベルのCTFを攻略したりと、いろいろつまみぐいしながら進めていきました。
どうやってイニシャルシェルを取るか。どうすれば特権昇格できるのか。そのあたりの勘所が掴めずwriteupに頼ることもあり悔しい思いもしました。
一方、経験値が貯まったことでノーヒントで攻略できるマシンもあり、日々の積み重ねの成果も少しずつ感じていました。
「Jr Penetration Tester」が終わりかけのところで日本人100位に到達し、この記事を書いています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171706/85e82f9d-4079-6bc7-92e3-62f6a734266a.png)
↑6/4時点の私のRankです。世界ランキングとしては11,773位で上位1%ということになっています。
たぶん登録してちょっと触っただけでやめた人が多いと推察しています。
ところで、TryHackMeはわざと攻撃できるポイントを設定しているマシンでありIDSやEDRに検知されることもありませんが、実際にはそんな簡単な話ではないはずです。その点も考えると、まだまだ先は長いなあと感じています。
# 英語力について
少し記載しましたが、TryHackMeは日本語化されておらず、全部英語のサービスです。
私は元々英語ができないエンジニアでしたが、34歳の時に中学英語からやり直して半年間ほど集中的に英語を勉強した時期があり、今はTOEIC645点です。
決して高い英語力があるわけではありませんが、時間をかければ読める、というレベルです。
調子が良い時は翻訳に頼らず読んでいますが、夜眠たい時は自動翻訳に頼ることもあります。
英語がそれほどできなくても自動翻訳を活用すればTryHackMeを進めることはできると思います。
が、分からない点があった場合のGoogle検索時など、英語が分かっていた方がやはり捗ります。

# これからについて
冒頭でも記載しましたが、日本人100位といってもサービス上の順位というだけで、プロのペンテスターの足元にも及ばないですし、まだまだ理解不足な点ばかりです。
引き続き、Easyのマシン攻略→Mediumレベルのマシン攻略をして知見を高めていくことと、一区切りついたらHackTheBoxにも挑戦をしてみたいと思います。