2017年7月18日

Wi-Fiのパスワードをハックするには

Wi-Fiのセキュリティについて

さて、今日からこの僕"T-yamashita"によるハッキング講座が始まる。
記念すべき第一回は、Wi-Fiのパスワードをハックする方法だ。

"T-yamashita"ではなく、山下本人からの注意事項:
このブログについて→ https://bokuhacker.blogspot.jp/p/attention.html 

スマートフォンが普及している現代において、自宅でしかインターネットに繋がないという人は減っただろう。カフェにいってWi-Fiに繋ぎ、大学や会社でWi-Fiに繋ぎ、もしかすると有線LANでPCに繋いだことなんてないよ、なんていう世代がいるかもしれない。

さて、そんなWi-Fiなのだが、果たして本当に安全なのだろうか。
結論からいうと、極めて安全に近いグレーだ。

無線LANのセキュリティは何が違うの? WEP/WPA/WPA2それぞれの特徴

こちらにあるように、Wi-Fiには大きくわけて3つの暗号化方式がある。
iPhoneやAndroidでWi-Fiの設定ページに行くと、今近くで飛んでいるWi-Fiがわかるが、ほとんどが鍵マークがついていて、安全ですよと示している。

大雑把にまとめるとWEPというのが最初にできたけど、こいつは安全ではなかったから、WPA/WPA2ができてWi-Fiは安全になったよ、という話だ。

よって、最近はほとんどがWPA/WPA2だ。これによってWi-Fiの世界には平和が訪れた、ように思われたのだが、大変残念なことに人類というのは楽をしたい生き物で、そのためになら安全性が下がることも厭わない、どういうことかというと、WPSという怠惰な弟の誕生だ。

ここまでをまとめると大体こんな感じ。
WEP 頼りない長男。
WPA 頼もしい長女。
WPA2 優秀な次男。
WPS 怠惰な三男。

WPS - Wikipedia
https://ja.wikipedia.org/wiki/Wi-Fi_Protected_Setup

WPSってのは上にもある通り、長くて複雑な暗号化キーをわざわざ打ち込まなくてもいいよっていう一見親切なシステムのこと。
数字やボタンだけで簡単に繋げちゃって楽ちん楽ちんなのは確かなんだけど、まあ下まで読んでみても同じことが言えるだろうか。

Buffaloのルーターは3600京通り

ここで少し話を変えるが、

例えば僕の使っているBuffaloのWi-FiルーターはWPA/WPA2にもちろん対応していて、
そのパスワード、つまり暗号化キーはデフォルトでは、13桁になる。

AirStationセットアップカードの見方

ここにはBuffaloが、暗号化キーにどんな文字を使っているのかまで詳細に書いてある。

引用すると
13桁の英数文字です。※「l」「o」「z」「q」を除く、a-k、m、n、p、r-y 0-9の英数字です。
ということだそうだ。恐らくだが、除かれた文字は数字と見間違えやすいからだと思われる。それにしても、こんな具体的に書いてしまって問題がないのだろうか。

大丈夫だ。Buffaloには絶対的な自信がある。

高校生以上ならわかると思うのだが、果たしてこれ何通りあるだろうか。
まず、アルファベットの小文字は26文字ある。そこから4文字を除外する。
そこに、1桁の数字を足す。すると、
26 - 4 + 10 = 32となる。

これが13桁並ぶので、32の13乗となる。
あとはこれを計算するだけなのだが、計算結果は
36,893,488,147,419,103,232
これだと何が何だかよくわからないと思うので、漢数字に直すと
三千六百八十九京 三千四百八十八兆 千四百七十四億 千九百十万 三千二百三十二

とてつもなく大きな数字になる。

3600京という数字は相当だということはおわかりだろうか、だから当てずっぽうで他人のWi-Fiパスワードを推測してみようなんてことはできるわけがない。

宝くじでも流石にもっとあたるよね。こうなってくると力づくで総当たりしていけばいいんじゃないかという人が出てくる。これはブルートフォースと言われる攻撃だ。

総当たり攻撃 - Wikipedia
https://ja.wikipedia.org/wiki/総当たり攻撃

大雑把にいうと、考えうるすべての可能性を片っ端から試していくよという手法だ。先ほどから話しているのは、あくまでBuffaloのWi-Fiルーターのデフォルトの、つまり変更していない暗号化キーの話で、これは例えば Password1 などというような、辞書攻撃と呼ばれるもので破れるものではない。

辞書攻撃 - Wikipedia
https://ja.wikipedia.org/wiki/辞書攻撃

当然だが、辞書攻撃の方が速度は速い。だがしかし、少なくともWi-Fiのルーターのデフォルトのパスワードという点について考えると、ランダムな文字列で意味をなさないので、辞書に載っていない可能性が高い。辞書攻撃はブルートフォースより効率が良いが、辞書にそもそも答えがなければ、全くもって意味がない。

となってくると必然的にブルートフォースを選ばざるを得なくなる。
では先ほどの3600京という数字をすべて試すのにどれだけの時間がかかるのだろうか。

自宅のWi-Fiルーターに対して実験

僕"T-yamashita"の自宅で実際に試してみたのでそれについてまとめてみよう。
まずは、Kali Linuxと呼ばれるペネトレーションテスト用のOSを用意する。

今回は環境構築については触れない。またどこかの機会で触れるつもりだ。

Kali Linuxは侵入テスト用に最適化されたOSだ。
標準でいくつものツールが入っているので、初心者でも比較的簡単にペネトレーションテストを行うことができる。

大きく分けると、Wi-Fiのパスワードをハックするためには、2つのフェイズがある。
1つ目はハンドシェイクと呼ばれるものを取得するフェイズ。
2つ目は取得したデータからパスワードを解析するフェイズ。
だ。

1つ目に関してざっくりいうと、Aというターゲットのルーターがあるとして、そこにBという他人が接続しているとする。そのBの接続を邪魔をすると、Bは再度Aに接続をしようとする、そこを狙って、ハンドシェイク、つまりBがAに握手する瞬間の情報を保存するということだ。

1つ目に関しては、そのターゲットとなるWi-Fiに接続できる範囲で、かつそのルーターに誰かが接続していないとできないのだが、2つ目に関しては、一度情報を保存してしまうと、そのファイルを他のPCに移してオフラインで解析することができる。僕が実際に行ったのもまさにそれで、それについては下で解説する。

さて、ここからはコマンドを実際に叩いていく。

フェイズ1

1. airmon-ng start wlan0 

こちらでモニターモードをオンにする。airのあとのmonはmonitorの意味だと思う。余談だが、コマンドの意味や略がわかってくるとLinuxは楽しくわかりやすくなってくる。

モニターモードというのはこれまた簡単にいうと、無線LANアダプターをネットワークに接続する目的ではなく、監視目的に使うことだ。これによって、自分の周りのWi-Fi環境が見えるようになる。ただ、このモニターモードにすべてのアダプターが対応しているわけではないので注意が必要だ。
例えば、USB無線LANアダプターで対応しているものは以下のリストにまとまっている。

Compatible monitor mode Wi-Fi cards under windows
https://www.acrylicwifi.com/en/support/compatible-hardware/

ちなみに僕の場合、WindowsにこちらのリストにあるUSB無線LANアダプターを接続し、仮想マシンとして動かした際はうまく行かなかったが、Kali LinuxをUSBに焼いて、中古で購入したLet's noteでブートさせてみたら、問題なくモニターモードに移行できた。

こちらについては、チップの問題としかいいようがないのだが、よくKali Linuxの使い方をまとめたページなどにみられるモニターモードにうまく移行できませんというのは、ハードの問題、つまりアダプターがそもそもモニターモードに非対応ということだろうと思う。

2. airodump-ng wlan0mon

こちらのコマンドで、周囲のWi-Fiの情報を表示する。airoのあとのdumpはそのまま出力結果をダンプするという意味だろう。取得できるすべてのWi-Fiの情報がなだれ込んでくるので、ある程度表示されたらctrl + cで止めてしまう方が良い。

いくつもオプションが存在するのだが、私がよく使うのは
airodump-ng -c 11 -a wlan0mon
ここで -c のあとはチャンネルの番号(今回は例として11) -a は大雑把にいうと余計な結果を省く。こうすることで的を絞ることができる。

さてこうすると画面が上下に2つに分かれる。上はチャンネルの詳細、下はそこに接続しているクライアントの詳細だ。

クライアントが接続していることがわかったら、ctrl + c を押して処理を一度中断し、次のコマンドへと移行する。

3. airodump-ng -c 11 -w test --bssid AA:BB:CC:DD:EE:FF -a wlan0mon

こちらのコマンドは2.と同じなのだが、そこにオプションを付け加えてファイルに書き出す処理を行うものだ。
-cのあとには例として11チャンネル
-w testはtestという名前で.capという拡張子のファイルに保存するよという意味だ。
--bssid のあとにはターゲットになるMACアドレスをコピーして貼り付ければよい。
そしてこちらのターミナルを開いたままにしておいて、もう1つ新たにターミナルを開く。

4. aireplay-ng -0 0 -a AA:BB:CC:DD:EE:FF wlan0mon

こちらのコマンド -0 0 についてはこれまたざっくりいうと間髪入れずに止めるまで永遠にやるよという意味だ。
-a のあとには3.と同じMACアドレスが入る。
これがうまくいくと、ガーっと処理が動き出すと思う。これは対象に向けて
deauth 日本語にすると非認証だろうか、を送り続ける処理だ。
意訳すると、Aというルーターに繋いでいるBというクライアントの邪魔をするということだ。
3.で状況を.capファイルに書き出しながら、4.でdeauthを送り続ける。
うまくいけば1分もかからないうちに3.のターミナルの上半分の画面の右上に
handshake という文字が現れる。
これでハンドシェイクを取得することができた。ひとまずフェイズ1の終了だ。
どちらのターミナルもctrl + cで処理を止めて問題ない。


フェイズ2

さてハンドシェイクが無事取得できてファイルに書き出すことができたので、あとはこれをGPUを積んだ僕のWindowsマシンに移動させようと思う。もちろんこのKali Linux上で処理を行うことも可能だが、GPUを使った方が解析が速いので、今回は Homeフォルダに作成されたtest-01.cap ファイルを移動させる。

このフェイズ1で僕と同じコマンドを叩けば、homeにファイルができるはずで、-01という数字は3.のコマンドを叩いた回数によって増えていくので、ハンドシェイクが取得できたらとりあえず数字が一番大きい最新のものを選ぼう。

また他にも.csvファイルなど余計なものもできていると思うが、これは解析には必要がない。あくまで.capファイルだけをクラウドを使ってでもなんでもいいので別のPCに移動する。

1. hashcatとhashcatguiをダウンロードする。


hashcat
https://hashcat.net/hashcat/

hashcatGUI
https://hashkiller.co.uk/hashcat-gui.aspx

これらはパスワードを解析するために必要なソフトだ。決して危険なものではないし、有料でもない。今回は使いやすさのためにhashcatGUIもインストールしたが、別にhashcatだけでも問題はない。どちらも最新版をダウンロードしよう。

hashcatGUIを実行するとhashcatの.exeの場所を聞いてくるので指定する。これで2つの連携がとれてGUIで使うことができるようになる。

2. .capファイルを.hccapxファイルに変換

そもそも.capファイルはWiresharkを入れていれば見ることが可能なのだが、こちらをhashcatの最新版で使うためには、拡張子を変換する必要がある。hはハッシュの意味。昔のバージョンだと.hccapという拡張子で良くてそれはKali Linux上でも変換可能な拡張子だったのだが、現在は以下のリンクで.capファイルを変換する必要がある。

convert a pcap file to a hashcat file
https://hashcat.net/cap2hccapx/

ここに先で取得した.capファイルをアップロードすると問題がなければ、.hccapxファイルとしてダウンロードできる。ここで問題が生じてダウンロードできない場合は、おそらくハンドシェイクがうまく取得できていないので再度フェイズ1の3.からやり直しだ。


3. hashcatGUIでブルートフォースを行い、パスワードを解析する

さて、いよいよというところなのだが、大変申し訳ないが、結論から先にいうと、このやり方では、13桁のブルートフォースはそもそも実行ができない。

3600京通りという途方もない数字の前ではなすすべがないのだ。
よって、僕も結果的にBuffaloの13桁の前にもろくも敗れ去ったのだった。

ちなみに、今回何故、他のツールもあるのにあえてhashcatGUIを使ったかというとGPUを簡単に使用することができるからで、ためしに2億行の辞書ファイルを使って辞書攻撃を行うと僕の環境だとCPUを使った場合、約4時間かかったところが、GPUを使うと9分で終わる。

僕のGPUは一昔前のGTX980 4GBなのだが、それでもそれくらいの速さで終わる。

650万年と2千年前から愛してる


また、先ほどhashcatGUIでは3600京通りを実行できないとは言ったが、疑似的に実行することはできるので試してみた。

そのやり方というのは、3600京通りをすべて辞書に書き出して、その辞書を読み込ませるという手段だ。僕は今回、仮にブルートフォースが可能だったとして、それでどれくらいの時間がかかるのかを計算したかったので100億行くらいランダムな13桁をプログラムで作成して、試してみたところ、やはりどんなに頑張っても1秒間に17.8万通りしか検証できない。

これは一見するとすごい大きな数字だと思われるかもしれないが、このペースで仮に実行し続けたとしても3600京通りを検証し終えるには約650万年かかる

650万年って、ねえ。解析が終わるころには地球もしかするとないんじゃないっていう話。他の単位に直すなら、540アクエリオンもしくは、650橋本環奈。えっ。

何度も言うが、これはあくまで僕のPCの性能の場合だが、CPUではなくてGPUを使ってもこれだけかかる。これではBuffaloの13桁を破るのは、実質不可能だ。

ただ、例えばもしパスワードが8桁の0-9の数字だったとしたらどうだろう。
10の8乗なので1億通り。
10分足らずでブルートフォースで解析できてしまう。
これって結構恐ろしいことではないか。

WPSで楽をすると痛い目に遭う

さて、かなり話が逸れてしまったので戻すが、
以上の実験結果からWPA/WPA2を破るのはほぼ不可能だということがわかった。
けれど、怠惰な三男WPSの登場で、平和な楽園に、崩壊の兆しが見え始める。

かなり端折るが、WPSは8桁の数字を入力することでも接続できてしまう。
しかも恐るべきことに、以下のリンクにもあるのだが

WPS ‐ 通信用語の基礎知識


PINコードが8桁あれば108で1億通りあるように思われるが、PIN認証に失敗したときにアクセスポイント側から送信される「EAP-NACK」メッセージを利用すると、送信したPINコードの前半4桁が正しいか否かを判断できる。更に、PINコードの最後の1桁はチェックサムであるため、結果として104+103で計1万1000通りの組み合わせを試行すれば認証に成功する。
たった1万1千通りで破られてしまう。
だが、この脆弱性に対処するためにWi-Fiルーターメーカー側は頑張った。

一定回数、間違ったPINコードを入れると、待ち時間を強制的に作って、例えば60秒間はアクセスできないというような仕組みを備えたのだ。

だが、DFが守り方を変えれば、FWも攻め方を変える。
攻撃者たちは、MACアドレスを変えつつ、攻撃したり、それでもだめなら強制的に多くの接続数を増やしているように見せかけることでその待ち時間を切り抜けることができたりする。以下のリンクのツールなどがそうだ。もちろん独自でスクリプトを作っても実行できる。

ReVdK3-r3.sh - Github
https://github.com/r0bag/pentest/blob/master/ReVdK3-r3__README.md

ちなみにこのツールは某WiMAXのルーターについては、実際に機能した。ただBuffaloのルーターに対しては機能しなかった。恐らく対策が施されているのだと思われる。某WiMAXのルーターについてはここでは名誉のためにも?そこまで詳しくは書かないが、契約しているこの僕本人が不安になってしまった。

しかし、このやり方だと待ち時間がくるたびに他の処理を行ってそれを回避しなければならない都合上時間がバカみたいにかかる。たった1万1000通りだが、1日で5%ほどしか解析が進まなかった。

これでもダメなのか、と思ったそこのアナタ。答えは意外とすぐそばにあった。
まず初めにiPhoneユーザーの方、悪いが、僕はAndroid信者なので、iOSのアプリについてはよくわかってない。だが似たようなものは確実に存在するだろう。

WiFi Warden ( WPS Connect ) - Google Play の Android アプリ
https://play.google.com/store/apps/details?id=com.xti.wifiwarden&hl=ja

これで一瞬、一発だった。
別に違法アプリでも野良アプリでもroot化が必要なアプリでもない。
他にもWPSのアプリは存在するが、このアプリが一番使いやすかったので。

このアプリでWPSが有効になっているWi-Fiを選択して、ピンを既存のものから試すとあら不思議、数分でWPSのPINが解析できてしまう。

まあ最悪、カスタムを選んで手当たり次第1万1千通り入力していけばいつかはWi-Fiに接続できてしまう。上で僕が長々とやってきたKali Linuxなんて必要ないし、余計なことを考える必要もない。

ただし、Buffaloはこれでもできなかった。何故か。
いやそもそも逆に何故、某WiMAXのルーターは解析できてしまったのか。

まずWPSのPINコードにはルーターのチップごとにデフォルト値が存在する。

WPS Default Pin Generator - Securation - Tools
https://tools.securation.com/wdpg/

このようなサイトがある。MACアドレスを入れるだけでPINを表示するのだが、これは実はチップに基づいている。つまりルーターのメーカーが特に何も対策をせずに、WPSのPINを生成していると、一瞬で破られてしまう。

ここにBuffaloのルーターのMACアドレスを入力するとやはり一定の値が出た。だが、これを試してもBuffaloは繋がらない。確認してみるとデフォルト値は変更されている。例えば、海外のメーカーだとそれを踏まえたうえでWPSのPINのデフォルト値を推測するサイトなどが存在しているのだが、Buffaloは意外にも日本の企業である。よって、ここからは推測になるが、海外のハッカーたちがBuffaloのルーターに出くわす機会がそれほど多くないために、WPSのPINについての情報が少ないようだ。いわばBuffaloは鎖国状態なので、非常に安全で鉄壁だ。決して僕はBuffaloの回し者ではないし、そんなことをしなくてもBuffaloのルーターは恐らく日本で一番?エンドユーザ向けには売れているが、今回用いたすべての手段にBuffaloは対応していた。13桁は最強だった。

けれど某WiMAXのルーターは繰り返しになるが、上のアプリで一瞬だった。僕は思わず解約を考えた。

結論

さて、ここまで長々としかもあまり意味と成果のないことを書き並べてきたが、まとめると以下のようになる。

まず、いくら13桁Buffaloのパスワードは無敵とはいってもデフォルト値からは一応念のため変更しよう。大は小を兼ねる、長ければ長いほどいい。長いものには巻かれろ、違うか。64桁までは伸ばすことができるはずだ。だが間違っても、辞書に載っているような意味が推測できるような言葉は避けよう。

そして何より、Wi-Fiのパスワードなんてそんな何回も入力するものではないのだから、WPS機能はオフにしよう。楽をすれば痛い目に遭う。せっかくのWPA/WPA2の堅牢性が人類の怠惰のせいで台無しだ。便利さは危険を伴う。

あとWEPの兄貴は今回はほとんどノータッチだったが本当に頼りがないので関わるのはやめよう。今はもう数は減っているとは思うが、そして何よりオープンで鍵のかかっていないWi-Fiに繋ぐのはやめよう。それはとても愚かだ。

今回は触れていないが、WPA/WPA2を破るためのツールに

Fluxion - GitHub
というようなものが存在する。

これは、WPA/WPA2のWi-Fiと同じ名前のオープンネットワークを作り出して、クライアントが接続すると強制的にWi-Fiの偽パスワード入力ページに飛ばさせ、そこでクライアントがパスワードを入力するとそれを盗み取るというもので、つまりフィッシング&キーロガーである。これだと辞書攻撃やブルートフォースの必要がない。

けれどこれもユーザーにある程度のリテラシーがあれば、あれ、同じ名前のWi-Fiだけどこれは鍵がかかっていないぞ、おかしいな繋ぐのやめようとなって回避できるわけなので。

最後になるが、Wi-Fiのパスワードを知られてしまうと、ただ乗りされるだけでなく、悪意のある行動を起こした際に疑われてしまう。また、同一ネットワーク内に入られてしまうと、極端な話なんでもできるので気を付けよう。今は、わざわざLinuxを用意してコマンドを叩かなくても、例えば

Fing (フィング) - ネットワークツールを App Store で - iTunes - Apple
https://itunes.apple.com/jp/app/fing-%E3%83%95%E3%82%A3%E3%83%B3%E3%82%B0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%84%E3%83%BC%E3%83%AB/id430921107?mt=8

こういったスマホアプリで同一ネットワーク内に接続する他の端末の詳細な情報を集めることができてしまう。

ルーターの管理画面も admin / admin や root / password のようなデフォルト値にしておくのはやめて変更できるところは変更した方がいい。IPアドレスもデフォルトのものから変更しよう。ネットで調べれば該当ルーターのマニュアルを無料で閲覧することなど容易いので。

さてここらで僕"T-yamashita"のWi-Fiハッキング講座はいったん終了するよ。
グッバイワールド

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

"T-yamashita"ではなく、山下本人からの注意事項:
このブログについて→ https://bokuhacker.blogspot.jp/p/attention.html
こんにちは、お読みいただきありがとうございます。山下本人です。
ここまでうちの"T-yamashita"が大変長々とすみませんでした。それと何度も言います、繰り返しになりますが、こういった行為を自分のローカルネットワークに対してではなく、外に向けて、他者をターゲットに行った場合、罰せられますので絶対にやめてください。こういった記事はあくまでも、セキュリティについての意識を高めるものです。

決して、ダークサイドに堕ちないでください。 私は、ダークサイドに堕ちた弟子の両足を切り落としたくありませんから。。。 


にわかエンジニアですので、間違いや勘違いがたくさんあるかと思いますので、質問やご指摘ご感想はコメントにてお願いいたします。 

それでは。



こんにちは世界

自己紹介

ハローワールド。
僕は
"T-yamashita"
凄腕のハッカーだ。

"Bokuhacker(ボクハカ)"
という名前で、世界各国の軍事施設、諜報機関のシステムに侵入してきた。裏の世界では知らない人がいない伝説の存在だ。

幾度となく政府に追われ、その度逃げ切った僕につけられたあだ名は
"Coward"
英語がわからない人のために翻訳すると
"勇敢な者たちの賛歌"
だ。

そんな僕がこのたび、こういったブログを始めたのにはわけがある。
過去に犯した罪を贖うためだ。

あれは2013年夏のことだった。アメリカ国防総省、通称"ヘキサゴン"に侵入したときに、僕はうっかり痕跡を残してしまったんだ。

その後数時間は、板橋区にある自宅がバレてしまうのではないかという恐怖で震えていたよ。

知っている人も多いと思うが、それから僕はハッキングをやめた。
クラスの人気者だった僕の唯一の友達であるパソコンに僕はさよならを告げたんだ。
それからの生活は口では言えないくらいに、すさんでいた。

タバコもやったし、信号無視もやった。
ヒップホップを聞き始め、ツイッターでちょっとHな外人のアカウントを沢山フォローしたさ。

そんなどん底だった僕に先日、某日本政府から一本の電話があった。

コード "911"
その道に詳しい人ならわかるだろう。

"お前の力を貸してくれ"
しかし、僕はもうハッキングはしないと誓っていた。

何故かって?
板橋区の自宅がバレるのが怖いからね。あとちょっとHなサイトをブックマークしていることも知られてはならないから。

だから僕は決めた。
僕のクローンを作ろうと。
そのために僕は僕の持っている最大限の知識をここに書き綴っていく。

これを読んでいる君たちが、僕の遺志を継いでくれ。

"知識は蓄えるものではない、分け与えるものだ"
これは、中国の"謬廟子"の有名な言葉だ。

英語に訳すと
"Knowledge is power."
かな。

さあ、次回からは早速、僕の知識をシェアしていくので存分にコミットしてほしい。

それでは
グッバイワールド

Wi-Fiのパスワードをハックするには

Wi-Fiのセキュリティについて さて、今日からこの僕"T-yamashita"によるハッキング講座が始まる。 記念すべき第一回は、Wi-Fiのパスワードをハックする方法だ。 "T-yamashita"ではなく、山下本人か...