DNS AMP 攻撃をしているクエリーが流れてきたので対応

Linux/UNIX
この記事は約3分で読めます。
スポンサーリンク

はじめに

 DNS クエリーのデータ量は少ないけど、その応答はクエリーよりもぐっと多くなる。
 オープンリゾルバな DNS サーバーを踏み台にし、ターゲットとなるホストへ文字通り「増幅」(AMP) されたデータを大量に投げつけて負荷を上げ、機能低下やサーバーダウンを引き起こそうとする攻撃が DNS AMP 攻撃。

 筆者の管理する DNS サーバーでは、今までこう言った大量のクエリーが外部より飛んでくることは無かったのだが、どうやらここ数日で結構な数の IP アドレスから受けていたようだ。
 当然ではあるが、外部参照の再帰クエリーは許していないので受けたクエリーに対しての応答はしていない。

20-Jul-2021 11:55:34.126 query-errors: client @0x7ff9e48735c0 98.156.x.y#80 (pizzaseo.com): view external: query failed (REFUSED) for pizzaseo.com/IN/RRSIG at ../../../bin/named/query.c:7145
20-Jul-2021 11:55:50.651 security: client @0x7ff9e48735c0 98.156.x.y#80 (pizzaseo.com): view external: query (cache) 'pizzaseo.com/RRSIG/IN' denied

 fail2ban で 300 個以上の IP アドレスを自動的に遮断していたようだが、このままだと攻撃の流れ弾を喰らっているだけなのが気に食わないから対処することとした。

iptables で遮断しておく

 fail2ban でも短時間で大量のクエリーを吐くパターンに引っかかれば自動的に遮断はできるけど、クエリーを投げてくる IP アドレスは時々刻々と変化し、全てを捌くことは不可能と思うのでここは iptables の string モジュールを用いて遮断する。

 DNS サーバーのログを見る限り、攻撃の対象とされているホストは pizzaseo.com というところ。
 そんな訳で pizzaseo.com を含むクエリーが飛んで来たら iptables で DROP してあげることになる。

 今回 iptables に追加したルールは次の通り・

-A INPUT -p udp --dport 53 -m string --algo kmp --hex-string "|0870697a7a6173656f03636f6d00|" -j DROP

 53/UDP に pizzaseo.com というホスト名を 16 進数で表した 0870697a7a6173656f03636f6d00 にマッチするデータが入ってきたら DROP するという動作。

 16 進数で pizzaseo.com を表すとき pizzaseo は 8 文字なので頭に 08、続いて pizzaseo の ASCII コードを並べ、「.」の位置で次に続く com の文字数 03 を入れる。で、com の ASCII コードを入れたら 00 で終端という感じになる。

動作確認

sudo iptables -nvL | grep -i 'string match'
9035 524K DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 STRING match "|0870697a7a6173656f03636f6d00|" ALGO name kmp TO 65535

 効いてる効いてる。

おわりに

 DNS AMP 攻撃はオープンリゾルバなサーバーを踏み台にするとは知っていても、オープンリゾルバでは無く、攻撃の踏み台としての効果が無い DNS サーバーに対しても無駄にクエリーを投げ続けているんだなーとはあまり考えたことが無かった。
 ともあれすぐに無駄なクエリーをたたき落とすことが出来たのでスッキリした。

スポンサーリンク
著者プロフィール
ぶっち

本格的に PC へ触れ始めてたのは 1990 年位から。
興味は PC 全般。OS は Windows と Linux などを嗜む。
プログラマやネットワークエンジニアを経てフリーに活動している 2 児の父なアラフォーのおじさんです。

ぶっちをフォローする
ぶっちろぐ

コメント

タイトルとURLをコピーしました