Japan
サイト内の現在位置
ペネトレーションツールの紹介 ~bettercap編~
NECセキュリティブログ2020年4月3日
NEC サイバーセキュリティ戦略本部セキュリティ技術センターの松本です。
今回はペネトレーションツールの紹介として、中間者攻撃の検証に利用できる「bettercap」をご紹介します。
bettercapとは
Wi-Fi、Bluetooth Low Energy(BLE)、ワイヤレスデバイス、イーサネットに対してスキャンやクラッキングを行うことのできるツールです。中間者攻撃(Man-in-the-Middle)を検証する際に利用できます。Man-in-the-Middle(MITM)とは、二者間の通信に割り込み、強制的に攻撃者自身の端末に通信を経由させることで、情報の窃取や改ざんを行う攻撃の手法です。
bettercap:https://www.bettercap.org/
bettercapの主な機能
bettercapには、主に以下の機能があります。
- ARPスプーフィング、DNSスプーフィング、DHCPv6スプーフィング
- JavaScriptプラグインで拡張可能なHTTP/HTTPSなどのプロキシ機能
- クレデンシャル収集のためのネットワークスニファ機能
- ポートスキャン機能
- Wi-FiやBLEに対するスキャンやクラッキングの機能
1.x系と2.x系での違いについて
bettercapには、1.x系と2.x系の2種類のバージョンが存在します。1.x系ではRuby言語で実装されていましたが、現在主流の2.x系では、GO言語で書きなおされています。これにより機能が大幅に拡充されました。また、2.x系からはインタラクティブシェルが利用でき、個人的には非常に使いやすくなったと感じています。
余談ですが、bettercapのロゴマークはGO言語のマスコットキャラクターでおなじみのGopher(ゴーファ)くんと、1.x系までのロゴであった忍者のようなキャラクターが合わさった、忍者コスのゴーファくんになり、愛らしいものになっています。
利用例紹介
前置き
さて今回の記事では、MITMによるDNSスプーフィングを題材としたbettercapの利用方法を解説していきます。
そもそもスプーフィング(spoofing)とは「なりすまし」という意味で、DNSスプーフィングは正規のDNSになりすます攻撃です。この攻撃により、偽のDNSから偽のIPアドレスを教えられたホスト(ユーザ)は、偽のIPを持つ攻撃者のフィッシングサイトに誘導されるなどの被害が発生します。誘導されてしまったユーザからすれば、正規のURLと画面デザインも同じように見えるという状況になるため、注意していても騙されてしまう可能性があります。DNSスプーフィングは単純な攻撃ではありますが攻撃に利用するのがARPやDNSの仕組みに基づいた通信であり、悪性かどうかを判断するのが難しいことから完全な対策が難しく、また認証情報や個人情報を盗まれるなどリスクも大きいという特徴があります。
利用例解説
前置きが長くなりましたが、解説を始めていきます。
以下の内容をお手元で試してみたいという方は、必ずご自身で準備した検証環境の下で行ってください。また、その結果何か不具合など発生しても責任を負いかねますのでご了承ください。
検証環境
今回は、VMware上に攻撃者端末(Kali linux)、DNSサーバ(Windows10)、クライアント端末(Windows10)を立ち上げた検証環境の下で行いました。

インストール
bettercapのインストール方法は、公式(https://www.bettercap.org/installation/)を確認してください。筆者はaptでインストールしました。
手順
- ARPテーブルの確認
まずはポイズニング前のクライアント端末のARPテーブルを確認します。
DNSサーバのIPアドレス192.168.13.2に対して、MACアドレスは00-50-56-eb-30-4aと表示されています。

- bettercapの起動
それでは攻撃者端末でbettercapを起動してみましょう。ここではeth0のインタフェースを選択して起動しています。ご自身の環境で行う場合にはifconfigコマンドで確認してください。bettercapを起動するとインタラクティブシェルが立ち上がります。ここでhelpコマンドを使えば、コマンドの確認やモジュールの状態を確認できます。モジュールは、例えばarp.spoofやhttp.proxy、http.serverといったものがあり、それぞれ必要な時に個別に設定や起動、停止を行うことができます。quit、もしくはqでbettercapを終了します。


- 攻撃対象の確認
net.showコマンドは、現在のARPテーブルの情報を表示します。

- 攻撃対象のスキャン
net.probe on を実行すると、アクティブスキャンが開始します。アクティブスキャンは、サブネット内の全IPアドレス(今回では192.168.13.1-254)に対してARPリクエストをブロードキャストすることです。bettercapはARPリプライの情報をもとにサブネット内のホストを記憶します。
再度net.showコマンドを実行すると、先ほどより表示件数が多くなっているのがわかると思います。 net.probe offでスキャンを中止できます。net.probe onを一度実行すると、ARPが流れつづけるので注意してください。

- ARPスプーフィングの実行
それではARPスプーフィングを実行してみましょう。以下のようにターゲット(DNSサーバ)を選択して実行します。arp.spoof onで実行し、arp.spoof offで停止できます。

- 再度ARPテーブルの確認
それではクライアント端末のARPテーブルを確認してみます。先ほどより表示件数が増えています。さらに下二桁が57-afの攻撃者端末のMACアドレスが2つ表示されています。192.168.13.128は攻撃者端末そのものですが、192.168.13.2はDNSサーバのものです。このARPテーブルの情報により、クライアント端末は誤ってDNSサーバに送るはずの通信を攻撃端末に送ってしまうことになります。

- Wiresharkで通信を確認
ARPスプーフィングが成功した状態をネットワーク上で実際に確認してみます。ネットワークトラフィックを解析するツールのひとつであるWiresharkを使って見てみると、192.168.13.129と192.168.13.2の通信だけをみているのに、MACアドレスが3つ確認できます。ARPスプーフィングによってクライアント端末は誤って攻撃者端末に通信を行い、攻撃端末はDNSサーバにその通信を横流ししていることが分かります。つまり、クライアント端末→攻撃者端末→DNSサーバの順番に通信しており、中間者攻撃が成立しているのが分かります。

- DNSスプーフィングの実行
DNSスプーフィングを実行するために、どのドメイン名に対してどのIPアドレスに誘導するかを設定する必要があります。これには①インタラクティブシェル上からdns.spoof.addressとdns.spoof.domainsを設定する方法と、②ドメイン名とIPアドレスを記述したファイルをあらかじめ作成しておいて、dns.spoof.hostsに設定ファイルを読み込ませる方法の二つがあります。今回は後者で設定を行いました。下図の一行目では先頭に「!」を付けることでBashのcatコマンドを実行してファイルの中身を表示し、その後setコマンドによって設定ファイルを読み込ませています。
読み込みが完了したら、dns.spoof onでDNSスプーフィングを実行します。dns.spoof offで停止することができます。

- クライアント端末が攻撃者端末に誘導される
クライアント端末上の「Internet Explorer」から、www.google.comにアクセスしてみます。

見事、攻撃者端末側で用意したWebサーバにつながりました。攻撃者端末はクライアント端末から送られてくるDNSクエリを読み取り、特定のドメイン名に対して、攻撃者が用意した偽のIPアドレス(今回は攻撃者端末)をクライアント端末に送り返しています。このため偽のIPアドレスを受け取ったクライアント端末は、攻撃者端末にアクセスをしてしまいました。
本当の攻撃者であれば、誘導先の表示を本物そっくりの偽サイトにしてログイン情報を求めたり、不正なJavaScriptを埋め込んだりする可能性があります。
最後に
今回はペネトレーションツールとして、特にMITMを検証できるツールであるbettercapを紹介しました。また類似のツールとしてettercapというツールもあります。同じARPスプーフィングでもARPパケットの中身や送信先が異なるなど、機能や仕組みを比較してみると違いがあり興味深いです。
以上、最後まで読んでいただきありがとうございます。
執筆者プロフィール
松本 康平(まつもと こうへい)
セキュリティ技術センター リスクハンティングチーム
主にペネトレーションテスト、脆弱性診断などを担当し、NECグループのセキュア開発・運用を推進。
IPA産業サイバーセキュリティセンターの中核人材育成プログラムを修了。
情報処理安全確保支援士(RISS)を保持。

執筆者の他の記事を読む
アクセスランキング
2025年2月16日~2月22日に読まれた記事のランキング