とある中学生プログラマーのブログ

脱スクリプトキディを目指している中学生がいろいろ書いていくブログです

ハッカーを目指している中学生へ

イントロダクション?

今この記事を読んでいるということは、あなたはハッカーをを目指しているということですね。まあ、この記事を読む前に、How to Become Hacker(How To Become A Hacker: Japanese)
を読みましょう。


どうでしたか?ハッカーに対するイメージが変わりましたか?え?俺が目指しているのはこんなのじゃないからブラウザバックする?まあまあ、そう慌てずに(´・ω・`)。確かに、この記事が言っている「ハッキング」はあなたの思い描いている「ハッキング」とは違うかもしれません。世間で言う「ハッキング」ははっきり言って用法を間違えています(とはいえもうJISの用語集に乗っちゃてるんで間違ってると言えるかというと微妙ですが)さっき、間違っている、と言いましたが、報道されている「ハッキング」の中で本当の意味でハッキングと言っているケースは少ない、と言ったほうが正しいでしょう。何が本当の意味でハッキングなのか?読破できずに悩んでいる「HACKING:美しき策謀」の言葉を借りるとすれば、「従来の方法論や枠組みに囚われることなく、想像もできない方法で問題を解決してゆく」ことだそうです。この言葉通りに考えていけばハッカーやハッキングと言ったものは思った以上に身近に有りそうです。例えば、数学の授業をあなたが受けているとしましょう。文章題が出され、もし模範解答と同じようなことをした。それはテストでは点は取れますが、「問題を解いた」に過ぎません。しかし、もしあなたが異常なまでのパズル狂か数学オタクで、クラスメイトや先生があっと息を呑む方法で楽しみながら問題を解いた、それなら、問題を解いた行為はハッキングですし、あなたは立派なハッカーでしょう。誰も思いつかないような方法で問題を解く、それがハッキングなのです。そして、セキュリティの世界(サイバー攻撃の世界?)では日々新しくソフトウェアの欠陥が発見されていっています。ソフトウェアの欠陥は開発者やユーザー、セキュリティ対策企業の頭痛の種となる一方で、今まで誰も気づくことのできなかった攻撃を創りだす発明のようなものでもあります。

ハッキングの歴史

さて、ここまでハッキングとは何かについて書きましたが、ハッキングがなぜサイバー犯罪を示す不名誉な言葉として報道機関に取り扱われることになったか、その歴史を書きたいと思います。
まず、ハッキングは英語にするとHacking、ingが付いているので現在進行形なわけで、元々はHackという言葉の訳です。そしてHackはもともと「たたき切る」「切り刻む」「耕す」などの意味を持つ英単語です。そして、この言葉が最初に(元の意味の)ハッキングとして使われるきっかけになったのは、まだコンピュータといえばパンチカードの時代、マサチューセッツ工科大学(MIT)の鉄道模型の制御を中古の電話機を用いて行うことをハッキング、とよんだのがきっかけだそうです。その後、この言葉は電子回路の設計やコンピュータの世界に浸透していきます。1960年代、どこかのハッカーがふと、電話のタダがけをする方法を思いつき、それを行うための装置を開発します。実はこのようなことをやっていたのは一人ではなく、スティーブ・ジョブズもその一人だったようです。しかし、おそらくこれがハッカーがサイバー犯罪者を指す言葉へと成り下がるきっかけとなったのでしょう。1980年代に入ると、ハッカーの中には「もっと面白いことをしたい」と企業の持つ大規模なコンピュータに侵入するハッカーも増えていきました。そして1983年、「ハッキング」という言葉が転落する契機となる事が起きます。映画、「WarGames」の公開です。

更にその直後に、ミルウォーキー州の青少年が病院などのコンピュータにサイバー攻撃を仕掛け、FBI沙汰になる事件が発生。これが話題となり、「ハッキング」はサイバー攻撃を指す言葉に成り下がってしまったのでした。しかし、この時代のハッカーと呼ばれていた人たちはまだ、自分で攻撃手法を考案していました。しかしその後、攻撃用スクリプトが出回るなどし、少し知識があれば何も考えずにサイバー攻撃を仕掛けられる時代が到来しました。これにより、もはやハッカーは完全にただのサイバー犯罪者を指す用語と化してしまいました。しかし、今でもIT業界には、オライリー社(コンピュータ関連の重くて高いけど技術書で定評のある有名な出版社です)など「ハッキング」の名誉回復を目指している人たちもいます。その人たちは、ハッカー、クラッカー、スクリプトキディという3つの言葉の線引きをしようとしています。
ハッカー:コンピュータや電子回路ににめっちゃ詳しい人。最近はバイオに詳しいバイオハッカーというのもいたりする。善悪の区別はない。
クラッカー・ブラックハット:ハッカーの中で技術を悪用する人
スクリプトキディ:ハッカーが作ったものを使ってハッカーぶる中二病。
こんな感じです。


ハッカーになろう

はい、ここまでみなさんの夢を散々ぶち壊して来たわけですが、皆さんの想像しているハッカーになるにはどうすればいいか、を書きたいと思います。まずはじめに言っておきたいのですが、
映画に出てくるようなハッカーにはなれない
これは最初にはっきり言っておきたかったことです。映画に出てくるようなハッカーというのは、たった数十秒で未知のセキュリティホールを見つけたり、やたらグラフィカルな画面でいろいろやってる人のことです(まあそういうツールもありますが)。世界中探せばどれほど強固に設計されたシステムでも短時間でほんのちょっとの手がかりからセキュリティホールを見つけ、陥落させることができる技量をお持ちの方はいるかもしれませんが、おそらくそのような人はまずいないでしょう。

サイバー攻撃の大まかな手順

サイバー攻撃は企業などへの攻撃を想定するとおおまかに、
1.情報収集
2.ネットワーク内の機器への侵入
3.ネットワーク内の重要なシステム、サーバへの侵入
4.あとは煮るなり焼くなりご自由に
に分けられます。それでは問題。この中で一番重要な作業はどれか?正解は情報収集です。まず標的の情報を集められるだけ集めます。この準備を怠ると、うっかり侵入検知システムやSOC(セキュリティオペレーションセンター。人力でトラフィックなどを監視するサービス)に見つかり、その後の作業に支障をきたしたり、最悪御用になったり(あなたが犯罪目的でサイバー攻撃を行っていれば、ですが)します。それに情報は多ければ多いほど後々楽です。この過程で脆弱性を探したりすることになります。
そして情報が集まったら侵入します。ここで先ほど情報収集で集めた情報を元に、脆弱性攻撃を仕掛けたり、社内に物理的に忍び込んでウイルス入のUSB(最近はマウスやキーボードのふりをするRubber Duckeyという恐ろしいデバイスがあります)を刺し込んだり、あるいはフィッシングメールを使ってマルウェアを送り込んだりします。
さあ、あなたは標的のコンピュータに侵入しました。しかし、あなたの乗っ取ったコンピュータ(あるいはIoT機器かもしれません)で目的のことはできないかもしれません。目的を達成するためにはさらなる調査をし、目的のコンピュータに侵入する必要があります。このときも、ひょっとしたらセキュリティシステムに感知されるかもしれませんので、細心の注意を払う必要があります。
さあ、散々神経をすり減らし、目的の情報を手に入れました。あとは、あなたが産業スパイであれば入手した情報を売り飛ばすでしょうし、テストを企業から依頼されたセキュリティ専門家であれば
報告書を書くことでしょう。

ハッカーになるには

ここまで、あくまで「標的型攻撃」をする前提で、机上でサイバー攻撃を想像(妄想?)してきましたが、それ以外にもボットネットを使った大規模なDDos攻撃、ランサムウェアをばらまく、フィッシング詐欺でカード番号やID、パスワードを引き抜くなど、サイバー攻撃の種類はたくさんあります。また、防御する側も、脆弱性を探す、マルウェアの動作を解析する、デジタルフォレンジック(サイバー攻撃などの状況の調査)など、様々なことを行います。さて、我々は何をすればいいか?私もスタートラインからまだ1μm程度しかいない、こんなことを書くのもおこがましい中学生ですが、やはり仲間がいたほうが心強いので、書いておきます。なのでこれから書くことにどれほど間違いが含まれているかは分かりません。90%以上間違いかもしれませんのでそこの所はご留意ください(もし間違っている場合は優しく指摘してください。でないと中の人の心が真っ二つになります)まず、プログラミングができないことには話になりません。いや、できなくてもcURLなどを駆使すれば既存の攻撃を再現する程度はできますが、プログラミングしたほうが圧倒的に効率がいいですし、脆弱性を探すなどするときにはプログラミングの知識が必要になります。プログラミング言語としては、C言語、アセンブリ言語(脆弱性を探す、攻撃コードを書くときに使います)、Python(攻撃の自動化や攻撃ツールのプラグイン開発で使います)、Ruby(Metasploitという脆弱性攻撃フレームワークの大御所で使います)シェルスクリプト(いろいろな作業の自動化に便利です)、PHP、MySQL、Javascript(この三点セットはwebサイトに使用されていることが多いです\_(・ω・`)ココテストに出るよー)などを学んでおく必要があります。(筆者はこれを書いていて自分で絶望しています)
また、OS等のコンピュータの基本的な所謂低レイヤーと呼ばれている部分の知識(システムコールとはなんぞや、など)、ネットワークの知識(arpとはなんぞや、postとはなんぞや?など)、暗号などについての知識(RSAってどういう仕組みなん?など)も必要になり、(筆者はこの辺で意識がもうろうとしています)暗号について学ぼうとすると数学が必要になります。(^0^)/オワタ
また、それ以外にもサーバなどに関する知識、またソーシャル・エンジニアリングと呼ばれる人を欺くテクニックなどなど、広範囲な知識や技術が必要になります。(筆者は泡を吹いて倒れました)
こう書くとハッカーになる道のりはとても長く感じられるかもしれません。はい、実際私も先が見えていません。しかし、安心してください。この記事を読んでいるということは、きっとあなたは中学生なのでしょう。(違ったらすみません)我々はティーンエイジャーです。まだまだ時間は十二分にあります。じっくりで構いません。しっかりコンピュータについて学んでいきましょう。

さあ、始めましょう

しかし、ハッカーになるためには何を始めればいいかわからないと思います。まず、手始めにLinuxを始めましょう。LinuxはWindowsに比べて使えるソフトウェアは少ないですが、コンピュータの中枢を知るにはうってつけのOSです。Linuxにもいろいろな種類がありますが、私はDebian、Ubuntu、Fedoraをお勧めします。仮想環境が使えるのでしたらすべて入れてほしいくらいです。また、デュアルブートをすることでWindowsを削除することなくLinuxと共存させることもできます。Linuxをインストールしたら、まず解説書やサイトを見ながら使ってみましょう。私はLPICのPDF教科書(無料です)がおすすめです。ただ初心者にはキツイかもしれませんので本を買うことをお勧めします。

https://linuc.org/textbooks/linux/

何を学ぶにもわかりやすい情報源は重要です。本を買う時も買うのはkindleやオライリーのeBookで構いませんが、本を選ぶときは本屋なり図書館に行きましょう。
ある程度使えるようになったらですね・・・。仮想環境などを使ってサーバを建ててみましょう。私はサーバに興味があり、そこからLinuxを学びました(未だにviが使えずnanoしか使えないのは内緒です)これまたLPICがPDF教科書(無料です)を出していたりもしますが、他にもいいサイトや書籍がありますので、探してみてください。さて、それくらいまでLinuxを使い込めれば、プログラミングを始めてみましょう。いや、Linuxを使い込んでいなくてもプログラミングは普通にできますが、やっぱりLinuxはプログラミングに便利です。何しろ、Debian系だったら
sudo apt-get install python
RedHat系なら
yum install python
でプログラミング環境を入れることができます。これがWindowsだと一々ダウンロードしてウィザードポチポチやってと面倒です。ちなみに最近のLinuxは標準で結構Python入ってたりします。それ以外のCに必要なGCCやらphp開発環境やらも結構一行のコマンドで入ります。あと、さっきの記事では挙げなかったJava君は入れるのがめんどくさいです。でもマイクラのModを作れたりするのでPythonをやったうえでならいいかもしれません。学ぶ順番としては、Python,PHP,Javascript→C言語→アセンブリ言語がいいと思います。アセンブリ言語はハッカーには必須ですが恐ろしく難解です。全てに言えることですが、特にC言語とアセンブリ言語に関してはしっかりした解説書を選び、しっかり時間をかけて学びましょう。でないとつまづきますそしてそれらを学んだら、いよいよ脆弱性攻撃のお時間です。まずは、私は以下の本をおすすめします。


体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践
SBクリエイティブ


Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際
Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際
オライリージャパン

正直、”HACKING:美しき策謀”は個人的にはコンピュータハイジャッキングを読んでから読むことをお勧めします。それなりに基礎が固まったら、Metasploit等を学び、モジュールをかけるようになるといいです。くれぐれも、脆弱性について学ぶ前にMetasploitを触らないように。正直、これを言ってくれる人が周りにいて欲しかったです。また、Metasploitのモジュールを読むのもいい勉強になります。それ以外にも、Exploit DBのコードを読んでも良いかもしれません。Exploit DBのコードを読めるようになるためには以下の本が良いかもしれません。

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考
サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考
オライリージャパン

ある程度知識が身についたようでしたら、CTFに出てみましょう。実力がどれくらいか分かります。特に、10月に開催されているSECCONはとても有名です。個人でもできますが、友人と徒党を組んでの参加も良いかもしれません。個人的には、CTFに出るのであればこの本をおすすめします。

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-
セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-
マイナビ出版
2015-09-30

また、少し敷居は高いですが、バグバウンディに参加するのも良いかもしれません。もし運よく脆弱性を見つけられればお金が手に入りますよ。


ハッカーと法律

さて、ここまで、ハッカーになるための方法を雑に書きましたが、ひとつハッカーに大事なことがあります。それは、倫理です。あなたがもし犯罪を犯そうとしているなら一言、割に合いません。あなたがアフリカに住んでいるなら話は別ですが(アフリカに住んでいるからと言って犯罪をしていい訳ではないですが)まともな先進国に住んでいるのであれば、まず捕まります。え?Torとか有るやん。何いってんの?と思われたそこのあなた。Torの匿名性は法執行機関が本気になれば砂上の楼閣です。実際に、Torのいくつかのサーバは政府機関がスニッフィングしていますし、なんらかのバグなど、思わぬことが原因でIPアドレスが特定されることがあります。結局は、Torは当局をすこし諦めさせる程度の力しかありません。そして、もし逮捕されれば、もう人生終了のお知らせです。よほどのことがない限り、企業はあなたのことを雇わないでしょう。犯罪は割に合わないと、しっかり肝に銘じておきましょう。


まとめ

ハッカーになることは決して簡単ではありません。しかし、頑張ればいつかなれます。もし本気でハッカーになりたいとあなたが考えているのであれば、早速始めましょう。いま日本ではサイバーセキュリティの技術者が不足しています。もしこれらの知識や技術を身につけておけば、将来的にも役に立つでしょう。また、ひょっとしたら世界で働けるかもしれません。思った日が吉日です。早速できるところから始めましょう。とはいえ、この記事を読んでいて少し疲れたかもしれません。東方Vocalでも聞きながら、すこしゆっくりしましょう。そして、ゆっくり取り組んでいきましょう。

×

非ログインユーザーとして返信する