Mr201206 no sql_security

260 views
153 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
260
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mr201206 no sql_security

  1. 1. Fourteenforty Research Institute, Inc. 1 Fourteenforty Research Institute, Inc. NoSQLとセキュリティ Fourteenforty Research Institute, Inc. 株式会社 フォティーンフォティ技術研究所 http://www.fourteenforty.jp Ver 2.00.01
  2. 2. Fourteenforty Research Institute, Inc. • インターネット環境が充実し、ウェブサービスなどの利用が一般化 • FacebookやTwitterなど大量のデータを扱うサービスが増加 • 既存のリレーショナルデータベースでは処理速度、スケーラビリティの面で 十分に対応しきれなくなった • それらのRDBMS以外のデータベース利用が注目される 2 NoSQLとは RDBMS NoSQL • MySQL • PostgreSQL • ORACLE • MongoDB • Cassandra • HBase
  3. 3. Fourteenforty Research Institute, Inc. • 既存のリレーショナルデータベースとは利用方法が異なる • いままでにないセキュリティ上の新たな問題はあるのか? 3 NoSQLのセキュリティは? SQL Injection ? RDBMS NoSQL • MongoDB • Cassandra • HBase • MySQL • PostgreSQL • ORACLE
  4. 4. Fourteenforty Research Institute, Inc. • NoSQLには多種多様なものが含まれる(カッコ内は代表例) – Key-Value Store型 ( Amazon Dynamo ) – 列指向型 ( Cassandra ) – ドキュメント指向型 ( MongoDB ) – グラフ指向型 ( Neo4j ) 4 NoSQLとその種類 利用方法がバラバラなため、それぞれにセキュリティの問題を考える必要がある
  5. 5. Fourteenforty Research Institute, Inc. • ドキュメント指向型データベース • Naver Japan, SourceForgeなどで利用されている • JavaScriptを用いたクエリが可能 MongoDB 5 JavaScript Injection?
  6. 6. Fourteenforty Research Institute, Inc. MongoDB 特有のJavaScriptを用いたクエリ 6 JavaScriptを用いて条件を指定 この場合”James”のドキュメントが取得される db.foo.save ( { name:”James”, age:35 } ); db.foo.save ( { name:”Mary”, age:28 } ); db.foo.find( { $where : “this.age > 30” } ); JavaScriptを用いる場合の 特別なキーワード (変数などではない) • データベースの“foo”コレクションに2つのドキュメント(名前と年齢の組)を保存 • 条件(JavaScript)を指定して検索
  7. 7. Fourteenforty Research Institute, Inc. <?php $age = $_GET[‘age’]; $m = new Mongo(); $db = $m->selectDB(‘test'); $collection = new MongoCollection($db, ‘foo'); $collection->insert( array( "name" => "James", "age" => 35) ); $collection->insert( array( "name" => “Mary", "age" => 28) ); $js = "function() { return this.age > $age; }"; $cursor = $collection->find(array('$where' => $js)); // ... 取得したドキュメントを処理 ?> MongoDB 脆弱となる可能性 7 Injectionの可能性 $age が “1000 || true” という文字列であると 必ずtrueとなり、すべてのドキュメントが取得される • PHPからMongoDBを用いたWebページ
  8. 8. Fourteenforty Research Institute, Inc. • 他にもセキュリティ上の問題点がある可能性がある • それぞれのNoSQL DB固有のセキュリティ対策が必要 • 一般化できないため、それぞれの製品でセキュリティ対策のノウハウをた める必要がある 今後の課題 8
  9. 9. Fourteenforty Research Institute, Inc. • NoSQLにもセキュリティ上の問題は存在する • それぞれに異なる視点や対策が必要になる • まだ知られていない問題点が今後出てくる可能性も十分にある まとめ 9 SQL Injection JavaScript Injection ... ? RDBMS NoSQL • MongoDB • Cassandra • HBase • MySQL • PostgreSQL • ORACLE

×