スタバなどのフリーwifiまたは、パスワードが脆弱なwifi環境から暗号化されていない認証を通るのは危険という話。
ARPテーブルを改ざん
TCP/IPにおいて通信するためには宛先MACアドレスが必要になる。その際にARPテーブルを参照するが、ARPテーブルに宛先MACアドレスが無い場合、ARPリクエストをブロードキャストで送信する。ARPリクエストを受け取った対象のIPアドレスが設定されている機器は、ARPリプライを返す仕様になっている。
arpspoofによって改ざんしたARPリプライを送信することでARPテーブルは簡単に改ざん可能であり、デフォルトゲートウェイとの間に割り込んでパケットを盗聴することができる。
詳細はこちらが大変参考になります。
https://netwiz.jp/arp-spoofing/
IPフォワードを有効化する
# sysctl -w net.ipv4.ip_forward=1
arpspoofで改ざんしたARPリプライを送信する。ゲートウェイ:192.168.1.1、ターゲット:192.168.1.110
# arpspoof -t ens33 -t 192.168.1.1 -r 192.168.1.110
別のシェルを立ち上げ、tcpdumpでパケットをcapture.pcapファイルにキャプチャする。
# tcpdump -i ens33 -w capture.pcap
試しに何かログインしてみる
攻撃者がキャプチャ中にターゲットPC:192.168.1.110から色々ログインしてみる。
WordPressにログインしてみる。
Basic認証にログインしてみる。
FTPにログインしてみる。
Wiresharkで見てみる
キャプチャしたファイルは後でじっくりWiresharkで見ることができる。
WordPressのIDとパスワードを見る。
WordPressはwp-login.phpにPOSTでIDとパスワードを送信していることから次のクエリで絞り込める。wp-login.phpの名前を変更していたとしてもキャプチャされてしまっては時間稼ぎでしかない。
ip.src == 192.168.1.110 and http.request.uri contains "/wp-login.php" and http.request.method == POST
対策:httpsにするコストが掛けられないのであれば、wp-login.phpにDigest認証を掛け、WordPressアカウント以上に強力なパスワードを設定する。(wp-cronが効かなくなるかも?)
ブルートフォースアタックによるログイン失敗ログの量が減るメリットもある。
Basic認証のIDとパスワードを見る。
Basic認証は平文でIDとパスワードをやり取りしているためこのように見えてしまう。
ip.src == 192.168.1.110 and http.request.method == GET
対策:Digest認証に変更する。
FTPのIDとパスワードを見る。
FTPもやはり平文でやり取りしているためこのように見えてしまう。
ip.src == 192.168.1.110 and ftp
対策:FTPsやSFTPなど暗号化された仕組みを使うのが一番だが、使用できないのであればvpnやsshのポート転送などと併用して信頼できるネットワークから接続する。
ARPスプーフィングされているか知るためには
攻撃を受けるとデフォルトゲートウェイのMACアドレスが変わる。tracertをするとデフォルトゲートウェイよりも手前に知らないアドレスが割り込まれている事が分かる。
ARPの仕様を突いた攻撃のため対策は難しいが、信頼できないwifiやLANは接続しないことと、暗号化されたプロトコルを使用することで傍受されても問題ないようにすることが大切。信頼できないネットワークを使用せざるを得ない場合はvpnやsshのポートフォワーディング等で信頼できるネットワークから利用する。