バグ2つ
- 高負荷状態でサイト側とmonacoind側の通信タイムアウトを誘発し、DBのトランザクション処理をロールバックさせることで同一のギフトコードから複数回利用が可能なバグ
- サイト側でロールバック処理されても、monacoind側では送金処理が行われてしまっていたバグ
この2つのバグにより、同一ギフトコードからn回の送金処理が可能になった
もくじ
事象
- ホットウォレットの保有コインすべての盗難
発覚の経緯
- 2018年9月1日午前11時、今回とは別件の攻撃に関する注意喚起を受けたのを期に改めて調査したところ、サーバ上にあるホットウォレットがユーザの残高に対して不足していることを確認
この件を受けてすぐにサーバを切断し確認作業を行っておりましたが、調査の結果ほぼすべてのMonacoinが盗難されていることが判明しました。 - 2018年9月2日午前1時、検証の結果攻撃に至った原因が高負荷時におけるギフトコード機能の不備であることを確認
- 従来よりセキュリティ対策としてサーバへのアクセス制限、各種の脆弱性テストなどを実施していた
原因(推測原因)
- 悪意あるユーザのギフトコード機能を悪用した攻撃
- モニタリング体制の不備
- テストや確認の不備
MonappyからMonacoinを送信する際は、
monacoindという別のサーバ上のアプリケーションと通信する仕様になっています。
この通信がタイムアウト等で失敗した場合はサーバダウンなどで送金に失敗しているとみなして、
取引をロールバックする仕様となっていました。
また、ギフトコードの処理に関してはデータベースのトランザクション機能等を利用しており、
本来同じギフトコードを二重に使用することはできないようになっていました。
しかし、高負荷状態でギフトコードを連続して使用しようとした場合、通信を受け取ったmonacoindの応答に時間がかかり、
サイト側ではタイムアウトとなってロールバックされたあとにmonacoind側では送金が行われていました。
この結果、一つのギフトコードから複数回送金されたものと考えられます。
また、この攻撃に際し少額のMonacoinを大量に送付しておくことでcoind送信時の負荷を増大させようとする試みも確認しました。現時点で推測される攻撃の流れについては上記の通りです。
恒久対応
※後で書く
原文
Monappyへの攻撃についてのお詫びとお知らせ (2018年9月2日 午前4時40分更新) いつもMonappyをご利用いただきありがとうございます。 この度、弊サイトに対して外部からの攻撃が発生し、調査の結果ホットウォレット内のMonacoinが盗難されていることが判明いたしました。 全残高の54.2%を保管しているコールドウォレット内のMonacoinについては影響はありませんでした。 詳細な攻撃の内容に関しては現在サービスを停止して調査を進めております。 ユーザーの皆様をはじめ、ご関係者の皆様に多大なるご迷惑をおかけしていますことを深くお詫び申し上げます。 なお、本件についてはblock withholding attackなどによるものではないと思われることを確認しました。 本文章の初版において誤解を招く表現をしてしまっていたことをお詫び申し上げます。 1. 発覚の経緯 2018年9月1日午前11時、今回とは別件の攻撃に関する注意喚起を受けたのを期に改めて調査したところ、サーバ上にあるホットウォレットがユーザの残高に対して不足していることを確認しました。 この件を受けてすぐにサーバを切断し確認作業を行っておりましたが、調査の結果ほぼすべてのMonacoinが盗難されていることが判明しました。 2018年9月2日午前1時、検証の結果攻撃に至った原因が高負荷時におけるギフトコード機能の不備であることを確認いたしました。 従来よりセキュリティ対策としてサーバへのアクセス制限、各種の脆弱性テストなどを実施しておりましたが、今回の攻撃を許してしまう結果となってしまいました。誠に申し訳ございません。 現在も攻撃の内容について調査を行っております。 なお、この件につきましてメールアドレスやパスワードなどユーザー情報などの流出は確認されておりません。 2. 攻撃の経緯 2018年8月27日から2018年9月1日にかけて、攻撃者と見られる複数のユーザーがギフトコードを大量に発行しました。 同8月29日から9月1日にかけて外部受け取り機能(ログインせずにギフトコードを受け取れる機能)を利用してギフトコードを受け取る際、高い頻度でリクエストを行うことで一つのギフトコードに対し数回の送金が行われてしまい、今回の攻撃に至りました。 MonappyからMonacoinを送信する際は、monacoindという別のサーバ上のアプリケーションと通信する仕様になっています。 この通信がタイムアウト等で失敗した場合はサーバダウンなどで送金に失敗しているとみなして、取引をロールバックする仕様となっていました。 また、ギフトコードの処理に関してはデータベースのトランザクション機能等を利用しており、本来同じギフトコードを二重に使用することはできないようになっていました。 しかし、高負荷状態でギフトコードを連続して使用しようとした場合、通信を受け取ったmonacoindの応答に時間がかかり、サイト側ではタイムアウトとなってロールバックされたあとにmonacoind側では送金が行われていました。 この結果、一つのギフトコードから複数回送金されたものと考えられます。 また、この攻撃に際し少額のMonacoinを大量に送付しておくことでcoind送信時の負荷を増大させようとする試みも確認しました。 現時点で推測される攻撃の流れについては上記の通りです。今後も引き続き調査を進めて参ります。 3. 原因 上記の通り、悪意あるユーザのギフトコード機能を悪用した攻撃が直接の原因となります。 また、当方の平時のモニタリング体制の不備、テストや確認の不備などが根本的な要因と認識しております。 4. 影響 Monappyに残高をお持ちの全ユーザー様が対象となります。 5. 今後の対応について まずは今回の攻撃に関する詳細の調査を最優先として、誠実に対応させていただきます。 その後、詳細のご報告、皆様へのご対応、再発防止策などについて対応を進めて参ります。 6. ご注意のお願い ・本件の対応を理由に、Monappyからメール・電話・郵便等でメールアドレスやパスワードなどをお伺いすることはありません。 ・本件に関するメールにファイルを添付してお送りすることはありません。 ・monappy.jp以外のドメインにてmonappyのメールアドレスやパスワードを入力させることはありません。 不審なメールなどには十分ご注意いただくようお願いいたします。 6. 本件に関する連絡先 Monappyサポート support@monappy.jp 7. 変更履歴 2018年9月1日 初版公開 2018年9月2日 午前2時30分 文章の推敲、誤解を招く表現の訂正しました。また、攻撃の詳細について調査結果を追記しました。 2018年9月2日 午前4時40分 攻撃の詳細が確定しました。また、よりわかりやすい表現になるよう追記しました。 皆様には本件においてご迷惑、ご不安をおかけしておりますことを改めてお詫び申し上げます。 今後も引き続き対応を進めて参ります。 2018年9月2日 monappy.jp
@see
- http://monappy.jp/index.html