オープンリゾルバ-になっていて攻撃喰らった話

疑問~謎のData Transfer20ドル超の請求~

ある日、AWSのマイ請求ダッシュボードを見ていた際、Data Transferというのが20ドルぐらいかかっていることに気づいた。
なんだこりゃ?いままでこんなのあったか?と思い過去の請求を追ってみたが、どの月も0.01ドルとか0.06ドルとかそんなもん。

原因調査~CloudFrontかEFSか?~

最初はCloudFrontとEFSを疑った。
何故ならこの月CloudFrontとEFSを導入したからだ。※WordPressサイトを冗長構成した
だけどアクセスログのファイルサイズを見てもそんな大きくない。
???と思ったので請求ページを色々調べてみたところ、日別で確認するとある1日に25ドル超費用が掛かっていることがわかった。
棒グラフで日別のコストを確認できるのだが、他の日はせいぜい2.5ドルとかそんなもん。
月初めは何かの請求か、どの月も若干多いのだがせいぜい9ドルとか。
結局私はWordPressのサイトを更新するときにバグってオリジンサーバ-エッジサーバ間でデータをめっちゃやり取りしてしまったんじゃないか?とかいう訳の分からない答えを出して終わりにした。
ただ、オリジン-エッジ間のアクセスを示すログがないのが不自然だと思ったことと、もう一回同じことが起きると(費用的に)困ると思い、CloudWatchにTraffic(out)があがったときにメール飛ばすように仕込んでおいた。

再発、原因判明

それから1ヶ月ちょいなにも起きず忘れかけていたが、ある日CloudWatchを見るとアラートがあがっていた。
サーバにログインして一旦再起動をかけて暫く待ってみたのだがやはりトラフィックは下がってこない。
Topコマンドを何気なく叩いたら、namedが結構CPUを喰っている。
え・・・。
namedってそんなに負荷かかるんだっけ?
とりあえずnamed-chrootを停止させてみたらなんとトラフィックが下がったではないか。
こいつが原因か!
named.confを見て、ログを出力する設定にしてあったことを思い出した。
ログを見たらめっちゃ攻撃されてるじゃん!
下記のようなものがババババ!って感じで流れていく。

23-Aug-2020 08:01:40.233 client @0x7fd3740cc200 85.251.72.184#65362 (PEACECORPS.GOV): query (cache) 'PEACECORPS.GOV/ANY/IN' denied
23-Aug-2020 08:01:40.235 client @0x7fd3740cc200 85.251.72.184#65362 (PEACECORPS.GOV): query (cache) 'PEACECORPS.GOV/ANY/IN' denied
23-Aug-2020 08:01:40.235 client @0x7fd3740cc200 85.251.72.184#65362 (PEACECORPS.GOV): query (cache) 'PEACECORPS.GOV/ANY/IN' denied
23-Aug-2020 08:01:41.163 client @0x7fd3740cc200 173.167.36.146#26994 (PEACECORPS.GOV): query (cache) 'PEACECORPS.GOV/ANY/IN' denied
23-Aug-2020 08:01:41.163 client @0x7fd3740cc200 173.167.36.146#26994 (PEACECORPS.GOV): query (cache) 'PEACECORPS.GOV/ANY/IN' denied
23-Aug-2020 08:01:41.165 client @0x7fd3740cc200 173.167.36.146#26994 (PEACECORPS.GOV): query (cache) 'PEACECORPS.GOV/ANY/IN' denied

とりあえずググる。
DNSサーバ 攻撃 とかで検索したと思う。
そしたらオープンリゾルバーになっている可能性が浮上。
https://www.ntt.com/business/services/network/internet-connect/ocn-business/ocn/customer/set_up/openr.html
recursion yes; となっていた。
試しにdigコマンドを使ってgoogle.comをわたしのネームサーバに問い合わせしてみた。
なんと名前解決してるじゃないか!

対処~再帰的問い合わせ無効化~

そこでnamed.confを書き換え、recursion no;にして再度試してみた。
google.comは名前解決できなくなった。
アクセスは相変わらずめっちゃ来ているのだが、問い合わせに対して返すデータのサイズが小さくなったのだろう、ピーク時には100Mを超えていたいたのが1M届かなくなった。
とりあえずめでたしめでたし。

とはならず、この後アクセスに対してfail2banでブロックを試みるのだが、これが闇の始まり。
つづく。