21
MongoDBの脆弱性診断 2015年11月 桃原裕太

MongoDBの脆弱性診断 - smarttechgeeks

Embed Size (px)

Citation preview

Page 1: MongoDBの脆弱性診断 - smarttechgeeks

MongoDBの脆弱性診断

2015年11月 桃原裕太

Page 2: MongoDBの脆弱性診断 - smarttechgeeks

目次

・自己紹介

・Webアプリケーション脆弱性診断とは?

・SQLインジェクションについて

・MongoDBの脆弱性診断について

 -演算子のインジェクションについて

 -その他の脆弱性について

・おわりに

Page 3: MongoDBの脆弱性診断 - smarttechgeeks

自己紹介

株式会社 シーエー・アドバンス / 桃原 裕太

前職はプログラマで、ECサイトやその他の開発業務に携わっていました。

※市役所ホームページ、車載器、圧延制御システム等

最近はWebアプリケーション脆弱性診断を行っています。

Page 4: MongoDBの脆弱性診断 - smarttechgeeks

Webアプリケーション脆弱性診断とは?(1/4)

Webサイトに脆弱性がないか、擬似攻撃を行って調査しています。

※注意点※

脆弱性診断は許可をもらっているサイトか、

自分で管理しているサイトに対してのみ行いましょう。

本資料で得た知識を他人のサイトで実施しないでください。

・不正アクセス禁止法に触れる可能性があります

・擬似攻撃により、対象サイトにて被害が発生する可能性があります

 例)データが吹っ飛んだり

Page 5: MongoDBの脆弱性診断 - smarttechgeeks

Webアプリケーション脆弱性診断とは?(2/4)

例)商品購入(正常なパターン)

itemId name price

1 アイテム1 100円

2 アイテム2 200円

購入(itemId=1,price=100)

アイテム1入手

Page 6: MongoDBの脆弱性診断 - smarttechgeeks

Webアプリケーション脆弱性診断とは?(3/4)

例)商品購入(不正なパターン)

itemId name price

1 アイテム1 100円

2 アイテム2 200円

購入(itemId=1,price= 50)

アイテム1入手

Page 7: MongoDBの脆弱性診断 - smarttechgeeks

Webアプリケーション脆弱性診断とは?(4/4)

調査した結果、脆弱性だと判断した場合は開発者へ報告します。

タイトル 商品を任意の価格で購入することが可能

危険度 High

説明 パラメータpriceを操作することで、任意の価格で商品を購入することが可能。

影響度 売上の減少など

Page 8: MongoDBの脆弱性診断 - smarttechgeeks

SQLインジェクションについて(1/3)

知っている方がほとんどだと思いますが、MongoDBの脆弱性についてお話する前に

簡単にSQLインジェクションについて説明します。

SQLインジェクションとは?

 ブラウザ等から送られる、悪意のあるSQL文やその一部により

 データベースを不正に操作できる脆弱性です。

Page 9: MongoDBの脆弱性診断 - smarttechgeeks

SQLインジェクションについて(2/3)

例)ログイン(正常なパターン)

ログイン

ログイン完了

http://example.net/login.php?uid= admin&pwd=password

【発行されるSQL】

SELECT

*

FROM

USERS

WHERE

uid= ‘admin‘

and password = ‘password‘;

結果、

adminでログイン可能

Page 10: MongoDBの脆弱性診断 - smarttechgeeks

例)ログイン(不正なパターン)

SQLインジェクションについて(3/3)

ログイン

ログイン完了

http://example.net/login.php?uid= admin&pwd=1‘or 1=1

【発行されるSQL】

SELECT

*

FROM

USERS

WHERE

uid= ‘admin‘

and password = ‘1‘ or 1=1;

結果、

最初にヒットしたユーザーでログイン可能

Page 11: MongoDBの脆弱性診断 - smarttechgeeks

MongoDBの脆弱性診断について(1/2)

SQLは書かないので、SQLインジェクションはないのですが、

MongoDB特有の脆弱性が存在します。

・インジェクション系の脆弱性

・パラメータを柔軟に受け入れることに起因する脆弱性

Page 12: MongoDBの脆弱性診断 - smarttechgeeks

MongoDBの脆弱性診断について(2/2)

診断時のチェックポイントは下記の4つになります。

1 演算子のインジェクション

2 SSJI(Server Side Javascript Injection)

3 JSON文字列へのインジェクション

4 パラメータの追加

Page 13: MongoDBの脆弱性診断 - smarttechgeeks

演算子のインジェクションについて(1/3)

PHPやRubyで発生しやすい。

リクエストパラメータを柔軟に受け取れるのが原因。

1 演算子のインジェクション

2 SSJI(Server Side Javascript Injection)

3 JSON文字列へのインジェクション

4 パラメータの追加

Page 14: MongoDBの脆弱性診断 - smarttechgeeks

演算子のインジェクションについて(2/3)

比較的、攻撃しやすい脆弱性なので詳しく解説します。

攻撃例について(PHPの場合)

※ $ne は、「≠(not equal)」です。

正常なリクエスト 不正なリクエスト

http://example.net/login.php?uid=admin&pwd=password http://example.net/login.php?uid=admin&pwd [$ne] =1

$user = $collection->find(array(

"uid" => $_GET[‘uid’], // admin

"pwd" => $_GET[‘pwd’], // password

));

結果、

adminでログイン可能

$user = $collection->find(array(

"uid" => $_GET[‘uid’], // admin,

"pwd" => $_GET[‘pwd’], // array("$ne" => 1)

));

結果、(adminのパスワードが1以外の場合)

adminでログイン可能

Page 15: MongoDBの脆弱性診断 - smarttechgeeks

演算子のインジェクションについて(3/3)

対策方法(PHPの場合)

・受け取ったパラメータをString型にキャストする

 → $pwd = (string)$_GET[‘pwd’];

・型チェック、等

Page 16: MongoDBの脆弱性診断 - smarttechgeeks

その他の脆弱性について(1/3)

・MongoDBではJavascriptが使えます。(複雑な絞り込み条件をしたい時に役立ちます)

・入力値の検証をしなかった場合、脆弱性につながる可能性があります。

1 演算子のインジェクション

2 SSJI(Server Side Javascript Injection)

3 JSON文字列へのインジェクション

4 パラメータの追加

Page 17: MongoDBの脆弱性診断 - smarttechgeeks

その他の脆弱性について(2/3)

・Javaで発生しやすい

・入力値の検証をしなかった場合、脆弱性につながる可能性があります。

1 演算子のインジェクション

2 SSJI(Server Side Javascript Injection)

3 JSON文字列へのインジェクション

4 パラメータの追加

Page 18: MongoDBの脆弱性診断 - smarttechgeeks

その他の脆弱性について(1/3)

・フォームから想定していないパラメータが来た場合、

 パラメータ名の検証をしていないと、そのままDBに登録されます。

1 演算子のインジェクション

2 SSJI(Server Side Javascript Injection)

3 JSON文字列へのインジェクション

4 パラメータの追加

Page 19: MongoDBの脆弱性診断 - smarttechgeeks

おわりに

セキュリティに興味のある方

実際に業務に携わっている方

Page 20: MongoDBの脆弱性診断 - smarttechgeeks

おわりに

ぜひ情報交換しましょう!

Page 21: MongoDBの脆弱性診断 - smarttechgeeks

おわりに

ご静聴ありがとうございました。