Linuxゲリラ戦記

俺は、いつも地面を這いつくばって必死に生きている。そう、俺は這ッカー!!

左を向いているペンギンみたいなキャラクター、ナックス

33.ハッキングあたーっく!wgetで情報を要求!

ナックス「20XX年。中国政府、グーグルに対してハッキングを行い、中国人人権家の個人情報を盗もうとする」

ナックス「これに対してグーグル。逆ハッキング行為でハッキング元が中国本土であることを突き止める。しかし、中国政府がハッキングを直接指示したという証拠は掴めず。中国からの撤退をちらつかせる」

ナックス「そして現在!我々健全なる男子は!スカートの下のパンツをちらつかせる女の子に!ハートをハッキングされている!」

ナックス「そんな危機的現状をどう思うのか!!そこの少年!!」

デビー君「…………」

ナックス「はい。というわけで今回は簡単なハッキングあたっく(じゃないけど、そんな感じなこと)を解説します」

デビー君「いいの?実行したら警察に捕まらない?」

ナックス「実行したら警察に捕まります。実行しないでください」

ナックス「というわけで今回はDoS攻撃を解説致します」

デビー君「ドス攻撃?」

ナックス「サービスを提供するもの、すなわちサーバーに過負荷を与える攻撃です。と言っても今回はDoS攻撃の基本、F5アタックの応用です」

ナックス「何度もいいますが、実行すると捕まります」

ナックス「で。他人に実行すると本当に捕まるし。かと言って私をターゲットにすると私が困るので、今回はDoS攻撃の手前まで解説して、DoS攻撃の手前の状態を当サイトで試していただこうというわけです」

デビー君「え?このサイトを攻撃するの?」

ナックス「いいえ。このサイトに本気のDoS攻撃された方はマジで警察に通報するので、私の解説以上の攻撃はしないでね」

ナックス「というわけで、まずは私が作ったカウンターの置かれたページを見てみてね」

デビー君「ん?カウンターの置かれたページを見てみたけど、数字が書かれてるだけだよ?そもそもカウンターって何?」

ナックス「カウンターというのは『このページに○○人のアクセスがあったよー』っていうものです。昔ほどカウンターを設置しているサイトは多くありませんが、デビー君も見たことくらいはあるでしょう。アクセスカウンターと言った方が分かりやすいかな」

ナックス「インターネットの話!!」

ナックス「皆さん!インターネットの仕組みについてご存知ですか!?実はインターネットとはリアルタイムに情報を送信しているのではなく、ある一瞬を切り取っているだけなのです!」

デビー君「さぁて、ナックスがまたわけの分からないことを言い出しました」

ナックス「おそらく、皆さんがなんとなく思っているネットの仕組みはこう!」

サーバーからリアルタイムに現在の情報が届けられている図

ナックス「上記は、ウェブサイトの情報が置かれている場所、すなわちウェブサーバーから情報がリアルタイムにあなたのパソコンに送りつづけられている、の図です。しかし、これはまちがったイメージです。実際は……」

最初の一回だけ情報をお届けする

ナックス「というように、最初の一回だけサーバーの情報が来て、皆さんはやりとりしたその一回の情報を見ているのです」

ナックス「つまり、私たちがサイトを見ている間、そのウェブサイトが情報を新しく書き換えても私たちは古い情報を見ている……ということがありえるのです」

古い情報のまま

ナックス「そんな時、私たちが新しい情報を見るにはF5キーを押すだけで良いのです。F5キーを押すことで、再度『情報くれ!』とサーバーに要求することになり、サーバーはその時点で最新の情報を皆さんにお届けします」

ナックス「さぁ!皆!カウンターの置かれたページでF5キーを押そう!」

デビー君「F5キー?」

ナックス「そうです。デビー君が苦手な真のCUI環境を起動するときにちょっとだけお世話になったかもしれない、あのキーです」

デビー君「えーっとそれは、CUI環境を開いてからF5キーを押せってこと?」

ナックス「いいえ。普通にChromeやらFirefoxやらOperaやらKonquerorやらIceweaselやらなんやらともかくインターネットでウェブサイトを見るソフト(ブラウザ)でカウンターの置かれたページを見ながらF5キーを押してください」

デビー君「えい!」

デビー君「お。数字が増えた」

ナックス「そうです。F5キーを押す(「情報くれ!」)と、ページの情報が更新される(「今の時点で最新の情報やる!」)のです」

ナックス「シンプルなカウンターの場合、『新しく情報を要求される度に数字を増やす』という機能になっています。そのため──」

デビー君「F5キーを押す度に数字が増えるよ!!これじゃあ『来た人を数える』っていうアクセスカウンターとしてはダメなんじゃないの?」

ナックス「そうなんです。現在ではこの問題を解決した高機能なアクセスカウンタも多々あります」

デビー君「F5キーを押しまくると、数字も増えまくる!面白い!うぉー!!もっと増えろー!!」

ナックス「と、今デビー君がF5キーを押しまくっている状態。それがF5アタック。DoS攻撃の基本です」

デビー君「え?これもハッキングなの?F5キーを連打しているだけだよ?」

ナックス「ちなみに、ハッキングは『困ったことをあらゆる手段で手早く解決する事』という意味であり、パソコンで悪いことをするのはクラッキングと言います。というわけで正確にはデビー君が今行っているのはクラッキングです。」

ナックス「インターネットの仕組みの解説の時に、情報のやりとりは一度だけと言いました。『情報くれー』『情報やるぞー』というシンプルなやりとり。しかし、『情報くれ』『まだか』『早くしろ』『待ってんだ』『急げ』と過剰に要求しまくると、要求への返答が間に合わなくなってエラーになることがあります。これは立派なクラッキング行為。と言っても、少数の人間がF5キーを連打するだけでは最近のサーバーはビクともしません。F5アタックを成功させるには大人数での攻撃が必要ですね」

ナックス「DoS攻撃とは、何らかのサーバー(今回はWebサーバー)に多大な要求(トラフィック)をだして、正常な動作をさせなくする(返答が遅くなる。エラーを出す)ことです」

ナックス「さて。早速CUI環境を立ち上げましょう」

デビー君「立ち上げましたー」

CUIを起動する

ナックス「今まではブラウザ(インターネットをするためのソフト)からサーバーに『情報くれ』と要求していました。これをコマンドから要求してみましょう。ウェブサーバーに『情報くれ』とリクエストする(要求する)のはwgetコマンドです」

$ wget 要求先のアドレス

ナックス「正確にはwgetコマンドはウェブサイト上の音楽ファイルや動画ファイル、画像ファイルなどのファイルをダウンロードする際に使うコマンドです。ですがそれだけではなくて、今回のようにウェブサーバーに『情報くれ』とリクエスト(して、ウェブページをダウンロード)することにも使用できます」

ナックス「今回の要求する情報は https://linuxgerira.com/linux/img/counter.php です」

$ wget https://linuxgerira.com/linux/img/counter.php

ナックス「結果は以下の様になります」

$ wget https://linuxgerira.com/linux/img/counter.php
--2022-09-14 15:20:48--  https://linuxgerira.com/linux/img/counter.php
linuxgerira.com (linuxgerira.com) をDNSに問いあわせています... 162.43.118.140
linuxgerira.com (linuxgerira.com)|162.43.118.140|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
`counter.php' に保存中

counter.php       [ <=>          ]     383  --.-KB/s 時間 0s       

2022-09-14 15:20:48 (40.6 MB/s) - `counter.php' へ保存終了 [383]

$ 

CUIからサーバーに要求を出す

ナックス「完了すると、コマンドを実行した場所に counter.php というファイルがダウンロードされています」

$ ls
counter.php

ナックス「counter.php はnanoなどのテキストエディタで開いてみると、ウェブサイトを作るためのコードが書かれているのが確認できますが、ウェブサイトを作るコードの説明までしていると、Linuxの使い方の説明とはまた別の範囲だと思うので、説明はしません。今回はウェブサーバーに『情報くれ』とリクエストしたい、というのが主であり、ダウンロードしたファイルで何かしたいわけではないので、counter.php ファイルは rm コマンドで削除してもらえますか?」

$ rm counter.php

ナックス「ちなみに!wgetというコマンドが無いよ、っていうエラーが出る方。コマンドもパッケージの一種です。yumなりapt-getなりで wgetコマンドをインストールすれば良いさ」

ナックス「さて。こいつをシェルスクリプトに組み込んで攻撃スクリプトを作るよ。nanoエディタでファイル名はfueru.shにでもしておこう」

$ nano fueru.sh

nanoコマンドでシェルスクリプトを作成する

nanoが起動する

ナックス「以下の様に書こう」

#!/bin/sh

a=1
while [ $a -le 10 ]
do
	wget https://linuxgerira.com/linux/img/counter.php
	rm counter.php
	a=`expr $a + 1`
done

シェルスクリプトを書く

ナックス「いつも通りに保存して終了だ」

Ctrlキーを押しながらOキー
保存するファイル名を決めてEnterキー
Ctrlキーを押しながらXキーを押して終了

ナックス「シェルスクリプトを見れば分かるように、今回はとりあえず10回だけ要求してみることにする」

ナックス「実行権限をつけて」

$ chmod u+x fueru.sh

実行権限をつける

ナックス「まず、ブラウザでアクセスカウンタがいまいくつなのかを確認してから」

実行する前のカウンタ

ナックス「実行しよう」

$ ./fueru.sh

実行する

デビー君「おぉ。確かに10回要求したみたいだ」

ナックス「うん。でもブラウザでは『10回要求する前の古い情報が表示されてる』。F5キーを押せば、10回要求された後の新しい情報が表示されるよ」

デビー君「おぉ!数字が増えてる!」

数字が増えてる

ナックス「ちなみに『10回要求したはずなのに、数字が11増えてない?』って思った方もいるかもしれないけど、『10回要求』 + 『最後にあなたが新しい情報を見るために更新した1回』で数字が11増えることになります」

デビー君「なるほどねー」

ナックス「その気になれば、無限ループで永遠に要求して、終わりたいときにCtrlキーを押しながらCキーで終了。なのですが、これはもう立派な犯罪で本当にサーバーエラーとかになるかもしれないので、無限ループでの当サイトの攻撃はやめてね。最高でも40回くらいまでにしておいてね」

ナックス「──さて。今回解説した方法で攻撃して通報された場合、警察があなたの身元を調べるのに必要な時間は……5分です」

デビー君「5分!?5分でバレるの!?」

ナックス「これは言い過ぎとしても、まぁその気になれば5分で見つかるよ、ってことです」

ナックス「というわけで次回!!『私の不倫と私のハッキングはなぜバレるのか(34.私のハッキングはなぜバレるのか。whoisコマンド。nslookupコマンド。ifconfigコマンド。)』です」