ポート開放してたらDB破壊され身代金を請求されかけた話
CA Tech Dojo/Challenge/JOB Advent Calendar 2019 の5日目のエントリーです。
この記事はツッコミどころ満載です。どうぞご自由にツッコんでくださいませ。
大学院休学中の怠け野郎です。
11/7~11/29にAbemaTVのフロントエンドでCA Tech JOBに参加しました。
1ヶ月のインターン終わりました~!ほんと早すぎた…そしてたくさんアベマくんグッズをもらった😂未熟すぎて若干折れかけたけど最後まで楽しめました!#catechjob pic.twitter.com/10BLtAainu
— もーりー⛅ (@_mooriii) 2019年11月29日
インターンでは新規ページの仕様策定〜実装までやらせてもらいました。
ディレクターの方やデザイナーの方と連携しながら仕事をさせてもらいとてもいい経験になりました。
今日は油断してたら自作webサービスのDBが破壊され身代金を請求されかけた話をします。
概要
レンタルVPSのDBポートを意図的に開放&外部接続可能にした結果、0.2ビットコインを請求されかけました。
事の発端
僕はYYさんという実況者がめちゃめちゃ好きで毎日見ています。
YYさんの好きなシーンはたくさんあって時々「あのシーンみたいなぁ」ってことがあるのですが、どの動画のどのシーンかわからなくて探すのに時間をかけたり、結局見つからなかったりしてました。
そこで、「みんなの好きなシーン集めちゃえばいいんじゃね?」と思い立ち、YYさんの好きなシーンを投稿するSNSを作成しました。
サイト紹介
システム概要
バックエンドはRails、フロントはReact×Ts、認証にはFirebase Authenticationを使用しています。YYさん以外の動画を弾くためにバックエンドでYoutube Data APIも使用しています。サーバーはさくらのVPSです。
認証はこんな感じ。
機能紹介
ホーム画面にある+ボタンを押すと投稿画面が表示されます。投稿したい動画のURLをコピペして、好きなシーンの開始地点と終了地点でボタンを押して投稿します。
投稿するとホーム画面に追加され、好きなシーンの開始地点から再生が始まり終了地点まで行くと、開始地点に戻り再び再生が始まります。
簡単な検索も可能になってます。
本題
サイトの話はこの辺にしておいて、本題に入ります。
「本番DBが見たい」
これが悪夢の始まりでした。
僕はSQLのGUIクライアントにSequel Proを使っています。
Sequel Proから本番環境に接続するためには外部接続の許可&ポート開放が必要なので、「まあ接続確認だけだし、そんな簡単にハックされることはないだろ。すぐ戻すから大丈夫」と思い普通に
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; *1
*1: コマンドはイメージです
自分のPCはあらゆるWiFiに接続するのでIP指定することもできず仕方なく全開放しました。
無事Sequel Proから本番DBが見えるようになりました!
数日後、、
「あれ、APIからレスポンスが返ってこない」
「どうせnginxの不調やらRailsサーバーが落ちたとかそういう類でしょ。」と思いながらSequel Proに接続。
すると、、、
もともとあったデータベースが削除されWARNINGというデータベースが作成されていました。
その中にはPLEASE_READという謎のテーブルがただ存在しているだけでした。
「怖」
もうその一言に尽きます。
速攻で検索。(いや、先に権限直せ)
するとこんな記事が。
要約すると、
「お前のDBを乗っ取った。DBのダンプがほしけりゃ金を払え。」
というランサムウェア攻撃。
幸いサイトは開発段階でDBはほぼ空っぽだったので被害はなし。危な。
なんとか事なきを得ました。
まとめ
自作サイトのDBのパスワードをrootのまま外部接続を許可したらデータを消され乗っ取られました。
その後は、rootのパスワードを変え、rootの外部接続を切り、専用のユーザーを作成し権限を与えて解決しました。
今では投稿数は200を超え、ユーザー数は50人を超えるまで増えてくれました。
以上セキュリティは大事だよ。というお話でした。
黙ってポートフォワーディングしとけってことです。
ではまた。