timeout検知してキャンセルする処理を実装してないのを狙われました
ってこと?
しょぼっ
2. 攻撃の経緯
2018年8月27日から2018年9月1日にかけて、攻撃者と見られる複数のユーザーがギフトコードを大量に発行しました。
同8月29日から9月1日にかけて外部受け取り機能(ログインせずにギフトコードを受け取れる機能)を利用してギフトコードを受け取る際、高い頻度でリクエストを行うことで一つのギフトコードに対し数回の送金が行われてしまい、今回の攻撃に至りました。
MonappyからMonacoinを送信する際は、monacoindという別のサーバ上のアプリケーションと通信する仕様になっています。
この通信がタイムアウト等で失敗した場合はサーバダウンなどで送金に失敗しているとみなして、取引をロールバックする仕様となっていました。
また、ギフトコードの処理に関してはデータベースのトランザクション機能等を利用しており、本来同じギフトコードを二重に使用することはできないようになっていました。
しかし、高負荷状態でギフトコードを連続して使用しようとした場合、通信を受け取ったmonacoindの応答に時間がかかり、サイト側ではタイムアウトとなってロールバックされたあとにmonacoind側では送金が行われていました。
この結果、一つのギフトコードから複数回送金されたものと考えられます。
また、この攻撃に際し少額のMonacoinを大量に送付しておくことでcoind送信時の負荷を増大させようとする試みも確認しました。
現時点で推測される攻撃の流れについては上記の通りです。今後も引き続き調査を進めて参ります。
3. 原因
上記の通り、悪意あるユーザのギフトコード機能を悪用した攻撃が直接の原因となります。
また、当方の平時のモニタリング体制の不備、テストや確認の不備などが根本的な要因と認識しております。
(※中略、全文はソース元へ)