Quantcast
Channel: ウィリアムのいたずらの、まちあるき、たべあるき
Viewing all articles
Browse latest Browse all 7270

「セキュア・プログラミング講座」にいってきた!

$
0
0
セキュア・プログラミング講座(Webアプリケーション編)ブートアップセミナー
(NIIで開催)にいってきた!
その内容をメモメモ


・IPAのセキュア公開資料
  脆弱性を前倒しで論点を挙げている
  やさしい論点が後になる

■導入:HTTPプロトコル
・Webアプリケーション
  まあ、せつめいしなくてもいい

・使われるプログラミング言語の例
 サーバー
  RoRに刺激されCake,Django・・・
 クライアント
  Dart,TypeScript
  JQuery
 大きなことが抜けている

・攻撃は通信から入ってくる
 HTTPプロトコル

・HTTPの通信を観察する
  ローカルプロキシ:リクエストの監視、改変
   DWASP・ZAP・Fiddlerなど

・HTTP通信の観察
 MIMEメッセージの一種

・POSTメソッド

・舞台裏は単純なテキストのやり取り
 →いくらでも捏造、改変できる



■SQLインジェクション:シンプルな攻撃
・攻撃の流れ
  入力パラメータにSQL文字列を使い、データを破壊する
・被害
  DBの中身を読み出される
  定義も
  RDBSの種類、バージョンがわかる
  情報の改ざん→データ破壊
  サーバーのっとり

・やりかた
  パスワードを' or 'a'='a とする

・悪さをする特殊企業
  '
  ;
スペース  SQLサーバー
-- コメント
\ 特殊記号:エスケープを乗り越える

・対策
 SQL文の発行を半自動化してくれる道具を使う
   よい道具
     O/Rマッパ
     言語に統合されたクエリ(LINQ、PL/SQL)
     プリペアド・ステートメント

   次善の策
     特殊記号をエスケープする

・O/Rマッパー
   RoR ActiveRecord
   Grails GORM
   Cake Model
   Spring S2JDBC,Hiberneta
 
・SQL注入のポイント
  SQL文を発行してデータベースへアクセス
  SQLの構文を攻撃者にいじられない



■スクリプト注入
 ブラウザ側を攻撃
・典型的にはXSS
  HTMLの文字列を貼り付けられると、
・偽ページ:
 セッションのっとり

・攻撃方法

・攻撃パターン
  スタイルタグなどもあぶない:いろいろな手口

・対策1:scriptタグを抑止
 対策2:URL属性の無害化

・バリエーション
  蓄積されたデータ内
  DOM型(AJAX)



■セッションメカニズムとユーザー認証について
・HTTPはステートレス
 セッションで
 セッションID運び方3種類
   URLリライティング
   POSTデータ
   クッキー



■セッションハイジャック
・SSLで暗号化していても、セッションハイジャックは
 起こる可能性はある
  →証明書を使わない限り、なりすましはできる

・被害
  なんでもできる
   金銭被害
   情報漏えい
   業務妨害

・悪い例
  ある種のフレームワーク
   ログイン前とログイン後で同じセッションIDを使っている場合
  「推測」への対応
    →処理系が作ってくれるので、それを使う
     ログイン、ユーザー認証成功のたびに異なる値を使う
  「奪取」の対応
    SSLなどを使う
    Cookieにセキュア属性
    Cookieの寿命を短くする
    ログイン成功時のCookieを発行しなおす

・セッションハイジャックのポイント
  発行と運用にかかわる
  他人が入ってくる
  対策:「推測」されない「奪取」されない

■セッションフィクセーション
(セッションIDのお膳立て)

・攻撃の流れ
 攻撃者はCookieを取得し、
 ユーザーにそのCookieを送りつけると
 攻撃者が知っているCookieでログインすることになる
   →付け替えないから

 あとは、セッションハイジャックと同じ

・対策
 ログインしたとき、新しいセッションIDにする



■アクセス認可の実装
・失敗パターン
 メニューにないページにアクセスできる
   URLをたたくと画面が出てくる
 他者の所有データにアクセスできる
   IDに連番のキーの場合
・対策
  ページごとに、保護するロジック
  オブジェクトのオーナーを確かめる

・より一般的:PEP
 保護すべきもの:Webページ
 問い:今ログインしているユーザーは
    その対象へアクセスする権限をもつか



■ほかの論点
・セキュア・プログラミング講座
 Webアプリケーション編
 に書いてある

  要件定義で考えないといけないもの
  設計でもいいもの
  実装でも間に合うもの


クロスサイト リクエスト フォージェリー
正常
 サーバーが送りだす→ブラウザが操作→サーバ書き込み

問題
 悪さサイトが送り出す→ブラウザが操作(しなくてもいい)→サーバーX

XSSとの違い
 クロスサイト リクエスト フォージェリーはサーバーに入ったところで悪さ
 XSSは、サーバーに入った後、ブラウザで悪さする
 
Cookieを他者がみる
document.cookie
ここに代入されてしまうと、Cookieを入れられてしまう。
 ところが、HTTPレスポンスにsecureをつけると、だいにゅうできない。

ところがPHPは(WebSphereも)、
ブラウザからセッションIDを使えた(セッションあだぷしょん)。
→悪いヒトが、セッションIDを送りつけると・・・

Viewing all articles
Browse latest Browse all 7270

Trending Articles