
内部ネットワークホストに対する脆弱性の特定とエクスプロイト実行のためのフレームワーク。WebRTC IP列挙とWebSocket、外部リソースフィンガープリンティングを組み合わせて動作します。
内部ネットワークホストを特定し、エクスプロイトを仕掛けるためのフレームワーク。WebRTCによるIP列挙、WebSocketによるホストスキャン、外部リソースのフィンガープリンティングを利用して動作します。
sonar.jsのペイロードを最新のWebブラウザで読み込むと、以下の処理が行われます。
<img src="https://raw.githubusercontent.com/mandatoryprogrammer/sonar.js/HEAD/x">や<link rel="stylesheet" type="text/css" href="x">でリンクを張り、onloadイベントをフックすることでフィンガープリンティングを試みます。期待したリソースが正常に読み込まれれば、あらかじめ設定されたJavaScriptコールバックが起動し、ユーザが指定したエクスプロイトが開始されます。sonar.jsはフィンガープリントのデータベースに基づいて動作します。フィンガープリントとは、デバイス上の既知のリソースのリストであり、onloadを介してリンク・検出できるものです。具体例としては、画像、CSSスタイルシート、外部JavaScriptなどが含まれます。
フィンガープリントデータベースの例を以下に示します。
var fingerprints = [
{
'name': "ASUS RT-N66U",
'resources': ["/images/New_ui/asustitle.png","/images/loading.gif","/images/alertImg.png","/images/New_ui/networkmap/line_one.png","/images/New_ui/networkmap/lock.png","/images/New_ui/networkmap/line_two.png","/index_style.css","/form_style.css","/NM_style.css","/other.css"],
'callback': function( ip ) {
// Insert exploit here
},
},
{
'name': "Linksys WRT54G",
'resources': ["/UILinksys.gif","/UI_10.gif","/UI_07.gif","/UI_06.gif","/UI_03.gif","/UI_02.gif","/UI_Cisco.gif","/style.css"],
'callback': function( ip ) {
// Insert exploit here
},
},
]
上記のデータベースには、ASUS RT-N66U WiFiルーターとLinksys WRT54G WiFiルーターの2つのデバイスに対するフィンガープリントが含まれています。
各データベースエントリには以下の項目があります。
name: フィンガープリントの対象となるデバイスを識別するためのフィールド。HP Officejet 4500プリンターやLinksys WRT54G ルーターなどの名前を指定します。resources: CSSスタイルシート、画像、JavaScriptファイルなど、リソースへの相対リンクの配列です。これらのリソースが8080のような非標準ポート上にあると予想される場合は、ポート番号を含めて:8080/unique.cssのようにリソースを指定します。JavaScriptのようなアクティブコンテンツを含む外部リソースを使用すると、通常の実行フローが中断される可能性があるため危険ですので注意してください。callback: 列挙されたホスト上にこれらのリソースがすべて存在することが確認された場合、デバイスのIPアドレスを唯一の引数としてcallback関数が呼び出されます。独自のフィンガープリントを作成することで、sonar.jsによって検出された内部デバイスに対してカスタムエクスプロイトを仕掛けられるようになります。一般的なエクスプロイトには、クロスサイト・リクエスト・フォージェリ (CSRF)、クロスサイト・スクリプティング (XSS) などがあります。これらの脆弱性を利用して、ルーターのDNS設定の変更、内部ファイルサーバーからのファイルのダンプなどが可能になります。
フィンガープリントをより簡単に作成するには、次のChrome拡張機能をご利用ください。アクセスしているページのフィンガープリントテンプレートコードを自動生成します。

sonar.jsを使用することで、ペネトレーションテストチームは、内部のログサーバー、ルーター、プリンター、VoIP電話などに対するWebエクスプロイトを構築できます。内部ネットワークはしばしば防御が手薄であるため、CSRFやXSSなどの攻撃は、ホストの内部ネットワーク上のデバイスの設定を乗っ取る強力な手段となります。しかも、これらはすべてインターネット上のWebページから実行可能です。
プリンター、ルーター、その他の内部サービスなどのデバイスをお持ちの方は、ぜひフィンガープリントを送信してください。マスターデータベースに追加いたします。今後もさらに多くのデバイスのフィンガープリントを追加していく予定ですが、現時点ではアクセス可能なデバイスに限りがあります。