素人エンジニアの開発日記

個人開発が趣味の素人エンジニアが日記を書きます

ポート開放してたらDB破壊され身代金を請求されかけた話

CA Tech Dojo/Challenge/JOB Advent Calendar 2019 の5日目のエントリーです。

この記事はツッコミどころ満載です。どうぞご自由にツッコんでくださいませ。

大学院休学中の怠け野郎です。

mooriii.com

11/7~11/29にAbemaTVのフロントエンドでCA Tech JOBに参加しました。

インターンでは新規ページの仕様策定〜実装までやらせてもらいました。

ディレクターの方やデザイナーの方と連携しながら仕事をさせてもらいとてもいい経験になりました。

今日は油断してたら自作webサービスのDBが破壊され身代金を請求されかけた話をします。

概要

レンタルVPSのDBポートを意図的に開放&外部接続可能にした結果、0.2ビットコインを請求されかけました。

事の発端

僕はYYさんという実況者がめちゃめちゃ好きで毎日見ています。

www.youtube.com

YYさんの好きなシーンはたくさんあって時々「あのシーンみたいなぁ」ってことがあるのですが、どの動画のどのシーンかわからなくて探すのに時間をかけたり、結局見つからなかったりしてました。

そこで、「みんなの好きなシーン集めちゃえばいいんじゃね?」と思い立ち、YYさんの好きなシーンを投稿するSNSを作成しました。

ytube-938fd.firebaseapp.com

サイト紹介

システム概要

バックエンドはRails、フロントはReact×Ts、認証にはFirebase Authenticationを使用しています。YYさん以外の動画を弾くためにバックエンドでYoutube Data APIも使用しています。サーバーはさくらのVPSです。

認証はこんな感じ。

f:id:mr04vv:20191201133440p:plain
認証システム構成

機能紹介

ホーム画面にある+ボタンを押すと投稿画面が表示されます。投稿したい動画のURLをコピペして、好きなシーンの開始地点と終了地点でボタンを押して投稿します。

f:id:mr04vv:20191201133837p:plain
ホーム画面

f:id:mr04vv:20191201134106p:plain
投稿画面

投稿するとホーム画面に追加され、好きなシーンの開始地点から再生が始まり終了地点まで行くと、開始地点に戻り再び再生が始まります。

簡単な検索も可能になってます。

f:id:mr04vv:20191201134423p:plain
検索画面

本題

サイトの話はこの辺にしておいて、本題に入ります。

「本番DBが見たい」

これが悪夢の始まりでした。

僕はSQLGUIクライアントにSequel Proを使っています。

www.sequelpro.com

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に接続。

すると、、、

f:id:mr04vv:20191201163034p:plain

もともとあったデータベースが削除されWARNINGというデータベースが作成されていました。

f:id:mr04vv:20191201163153p:plain

その中にはPLEASE_READという謎のテーブルがただ存在しているだけでした。

「怖」

もうその一言に尽きます。

速攻で検索。(いや、先に権限直せ)

するとこんな記事が。

www.guardicore.com

要約すると、

「お前のDBを乗っ取った。DBのダンプがほしけりゃ金を払え。」

というランサムウェア攻撃。

幸いサイトは開発段階でDBはほぼ空っぽだったので被害はなし。危な。

なんとか事なきを得ました。

まとめ

自作サイトのDBのパスワードをrootのまま外部接続を許可したらデータを消され乗っ取られました。

その後は、rootのパスワードを変え、rootの外部接続を切り、専用のユーザーを作成し権限を与えて解決しました。

今では投稿数は200を超え、ユーザー数は50人を超えるまで増えてくれました。

以上セキュリティは大事だよ。というお話でした。

黙ってポートフォワーディングしとけってことです。

ではまた。

ytube-938fd.firebaseapp.com