【障害報告事例】MonappyからMonacoinが盗難

 

バグ2つ

  • 高負荷状態でサイト側とmonacoind側の通信タイムアウトを誘発し、DBのトランザクション処理をロールバックさせることで同一のギフトコードから複数回利用が可能なバグ
  • サイト側でロールバック処理されても、monacoind側では送金処理が行われてしまっていたバグ

この2つのバグにより、同一ギフトコードからn回の送金処理が可能になった

 

 

事象

  • ホットウォレットの保有コインすべての盗難

 

発覚の経緯

  • 2018年9月1日午前11時、今回とは別件の攻撃に関する注意喚起を受けたのを期に改めて調査したところ、サーバ上にあるホットウォレットがユーザの残高に対して不足していることを確認
    この件を受けてすぐにサーバを切断し確認作業を行っておりましたが、調査の結果ほぼすべてのMonacoinが盗難されていることが判明しました。
  • 2018年9月2日午前1時、検証の結果攻撃に至った原因が高負荷時におけるギフトコード機能の不備であることを確認

 

  • 従来よりセキュリティ対策としてサーバへのアクセス制限、各種の脆弱性テストなどを実施していた

 

原因(推測原因)

  • 悪意あるユーザのギフトコード機能を悪用した攻撃
  • モニタリング体制の不備
  • テストや確認の不備

MonappyからMonacoinを送信する際は、
monacoindという別のサーバ上のアプリケーションと通信する仕様になっています。
この通信がタイムアウト等で失敗した場合はサーバダウンなどで送金に失敗しているとみなして、
取引をロールバックする仕様となっていました。
また、ギフトコードの処理に関してはデータベースのトランザクション機能等を利用しており、
本来同じギフトコードを二重に使用することはできないようになっていました。
しかし、高負荷状態でギフトコードを連続して使用しようとした場合、通信を受け取ったmonacoindの応答に時間がかかり、
サイト側ではタイムアウトとなってロールバックされたあとにmonacoind側では送金が行われていました。
この結果、一つのギフトコードから複数回送金されたものと考えられます。
また、この攻撃に際し少額のMonacoinを大量に送付しておくことでcoind送信時の負荷を増大させようとする試みも確認しました。

現時点で推測される攻撃の流れについては上記の通りです。

 

 

恒久対応

※後で書く

 

 

 

原文

 

@see

  • http://monappy.jp/index.html

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)