見出し画像

海外からログイン周りを攻撃された

運用しているサービスのログイン機能に攻撃を仕掛けてきたナメた野郎がいたので闘いの記録を残しておく。

今回受けた攻撃は、パスワードリスト型攻撃というやつだ。

どこで手に入れたか知らんが、関係ない他サービスで流出したと思われるメールアドレスとパスワードのリストをそのまま流し込まれたのだ。
うちのサービスと他サービスで同じメールアドレスとパスワードを利用していた場合、ログインできてしまう、というわけだ。
幸い、被害はゼロであったが、運が良かっただけとも言える。

細かいのは割愛するが、仕込んでいた主なセキュリティ対策は以下。
・CSRF
・CORS
・ログイン回数制限
・WAF

まぁまぁのザルだ。

①初動

アタックに最初に気づいたのはバックエンドの人間だ。
ログイン失敗時は400系のエラーを返すようにしている。
400系と500系のエラー数が閾値を超えるとそれぞれ通知が届く仕組みになっている。
ぶっちゃけ、400系のエラー通知は頻繁に届くので、俺は気にも留めていなかったのだが、他の人(以下、神)が念のため少し調べたのがきっかけだ。

神「なんかログインでめっちゃ失敗してますね」
俺「え?ログイン落ちてんの?」
神「いや、ログイン出来てる人もいるし、自分もログインできます」
俺「え?ちょっと何言ってるかわかんない。(ヘラヘラ鼻ホジー)」
神「うーん。なんか動きがロボットっぽいですね。」
俺「ほーん。ドラえもんじゃんウケルwww(鼻ホジーパクー)」
「なんかメールアドレスとパスワードを流し込まれてるっぽいです」
俺「なにそれブルートフォース?一応IP蹴っとけよ(鼻くそうめぇwww)」
「いやなんかちゃんとした日本人のメールアドレスっぽいのが流し込まれてます」
「IPも世界中から来てるようで特定できません」
俺「えっ(鼻血まみれ)」

ログを見てみると確かにそれっぽいメールアドレスでアタックしているようだ。
1秒に1回程度のリクエスト頻度で、発信元IPは世界各地に分散されていた。

俺「あれ?これちょっとヤバくね?(白目)」

ここまで、エラー通知が飛んでから5分くらい。
俺は責任者に状況の説明をするための文章を作り始めたが、いやそんなのやってる場合じゃない。
「ちょっと攻撃喰らってるっぽいのでメンテにします」と簡単なメンションだけ飛ばして、返信を待たずにとりあえず俺の判断でメンテナンスにした。それくらいの裁量はある。攻撃が止むことはないが、ログインされる可能性は無くなったのでとりあえず安心だ。

②緊急ミーティング

まず被害の確認。
アタックの発信元は全て国外からのアクセスだったようで、それらは全てログインに失敗していた。
さらに、攻撃に利用されたメールアドレスも何故か律儀にアルファベット順だったため、それらの裏付けもとれた。
ただのラッキーだが被害はゼロだった。

以下、検討した対策の抜粋とか
・国外IPをブラックリストに追加
 →一時的に追加してもいいが、根本的な解決にはならない。
・一旦ログイン機能を封鎖してサイトだけ復活させる。
 →やれば出来るが、そこまでして復活させる意味無さそう、混乱するユーザいそう。
・ていうかセキュリティどうなってるん?
 →CORSとかCSRFはおまけ程度の認識。ちょっと工夫すれば余裕で回避できる。
・2段階認証入れるのにどれくらいかかる?
 →難しくはないが一朝一夕では出来ない。既存ユーザにも影響が出る。
・Google reCAPTCHAは?
 →それだ。あんなもん5秒で実装できるのでそれでいこう。
・ログインした時にユーザーに通知が飛ぶようにしたい
 →分かった。いっちょやってみっか。
・ユーザへの説明やお知らせは?
 →必要。誰か考えておいて。

ここまででメンテ突入から40分くらい。

③実装

Google reCAPTCHA v3は他のサービスでも使いまくっているので、実装までほんの数十分で完了。
並行してログイン通知の開発だが、通知の中身に何を記載するかにもよるが、とりあえずログイン元のIPとuserAgentあたりを記載することにして、こっちも数十分で完了。
テスト環境にアップして動作確認。よし、うまく動いている。

ここまでメンテ突入から70分くらい。

④メンテ解除

いよいよメンテ解除だ。
と、ここでなんと、まだ国外IPをブラックリストに追加していないのに攻撃が止まっていることに神が気づく。
なるほど、ロボットを放置しているわけじゃないな、人間が様子みてやがるなクソが。ぶっ殺してぇ。

俺はこういうナメた野郎をぶっ殺すため日々トレーニングしている。自衛隊式懸垂は17回以上できるし、片手懸垂だって10回できないくらいはできる

まぁいい、国外IPを一時的に弾くことにして、form値も変わるのでひとまず大丈夫だろう。
ということでメンテ解除。
しばらく様子を見てみるが、攻撃のようなものは観測されない。
追加機能もうまく動いているようだ。
とりあえず一時しのぎにはなったようだ。

⑤その後

その後数日間様子を見ていたが、結局攻撃が来ることはなかった。
恒久対応としてまず2段階認証を実装した。結構簡単だ。
さらに折を見て2要素認証も実装予定だ。2要素認証は決済時など必要な時に入れれば邪魔にならないだろう。
また、ログイン周りの監視体制も見直すことになった。
具体的な監視条件は伏せておくが、かなり手の込んだものを仕込んだので、しばらくは安泰だろう。
(この監視の仕組みは他のサービスにも入れることにした)

とりあえずreCAPTCHAは入れておくべきだったな。もちろん完全に防げるわけではないが。ちなみに発信元IPは世界中に1000以上用意されていた。ふざけんな。


現場からは以上です。


この記事が気に入ったらサポートをしてみませんか?