タグ

ブックマーク / blog.ohgaki.net (21)

  • OWASP Secure Coding Practices – Quick Reference Guide

    (Last Updated On: 2021年5月2日) OWASPのガイドラインはPCI DSSでも参照するように指定されているセキュリティガイドラインです。その中でも比較的簡潔かつ体系的にセキュアプログラミングを解説した資料がOWASP Secure Coding Practices – Quick Reference Guide (v2) です。 日語訳がないようなので一部未訳ですが訳しました。CC-BY-SAライセンスです。クリエイティブコモンズライセンスに従って自由に配布できます。 チェックリスト形式になっているので、自分のコーディング/開発スタイルがどの程度適合しているのか、簡単にチェックできるようになっています。コーディングスタイルのみでなく、運用はシステム構成に関連する物も含まれています。私が解説/紹介しているセキュリティ対策を行っている開発チームであればこれらの殆どに適

    OWASP Secure Coding Practices – Quick Reference Guide
  • Struts 2の脆弱性でHTTPのContent-Typeヘッダーからリモートコード実行ができる理由

    (Last Updated On: 2018年8月8日)Apache Struts2 の脆弱性対策について(CVE-2017-5638)(S2-045)は HTTPプロトコルのContent-Typeヘッダーでリモートからコード実行ができる という問題です。どうして「Content-Typeヘッダー」でコード実行ができたのか?気になったので調べたメモです。 コード実行ができた理由は「国際化(翻訳)用のメッセージ処理メソッドが、プログラミング言語のようにパースして実行する仕様」であったことでした。気にしていないとこのパターンでリモートコード実行ができてしまうコードも在ると思います。 Struts2修正版(2.5.10.1)で変更された箇所 バージョン番号やテストプログラム除く変更箇所は以下の部分です。 --- a/core/src/main/java/org/apache/struts2/i

    Struts 2の脆弱性でHTTPのContent-Typeヘッダーからリモートコード実行ができる理由
    yuiseki
    yuiseki 2017/03/21
  • ReDoSの回避

    (Last Updated On: 2018年8月8日)正規表現のアルゴリズムを攻撃するDoS攻撃のReDoSを可能な限り回避する方法を考えてみます。 追記: 破滅的なReDoSは非常に短い検索対象文字列でDoS攻撃が可能でした。念の為と思い、このエントリでは正規表現検索の対象文字列を短くする対策を紹介していましたが、この種の対策が効果があるケースがありました。 ReDoSに脆弱になる典型的な正規表現は以下のような正規表現です。 Evil Regex pattern examples (a+)+ ([a-zA-Z]+)* (a|aa)+ (a|a?)+ (.*a){x} | for x > 10 Payload: “aaaaaaaaaaaaaaaaaaX” 出典:CHECKMARX  2015 (PDF) マッチパターンが繰り返される正規表現が問題になります。 メールアドレスにマッチする正

    ReDoSの回避
  • 正規表現を使ったDoS – ReDoS

    (Last Updated On: 2018年8月8日)いつかは忘れるくらい前に正規表現のアルゴリズム自体を利用してDoS攻撃を行うReDoSが発表されていました。今まであまり気にしていなかったのですが、検索しても日語のページが出てこないようでした。詳しく知るためのリンクなどを紹介します。 少し検索して出て来た日語ページはHPのページでしたが、たまたまインデックスされていたページがヒットしたようでした。また記載されている情報は不十分でした。(ページ下のコピーライトからFortifyの情報のようです) 日語のページで良いものは無いようなので、ReDoSの英語ページ/PDFを紹介します。 Wikipedia OWASP CHECKMARX  2015 (PDF) CHECKMARX 2009 (PDF) 3つ目のCHECKMARXのPDFは解りやすいと思います。OWASPのページはCHE

    正規表現を使ったDoS – ReDoS
  • StackExchangeが攻撃されたReDoSの効果

    (Last Updated On: 2018年8月13日)StackExchangeがReDoS攻撃に遭いサイトがダウンした原因をStackExchangeのブログで紹介していました。 PHPへの影響があるか試してみました。結論を書くと、脆弱な正規表現を使っていて攻撃者が入力をコントロールできる場合、簡単に攻撃できるようです。PCRE、Onigurumaの両方で試してみましたがどちらも脆弱でした。 参考:正規表現でのメールアドレスチェックは見直すべき – ReDoS Onigurumaでは破滅的なReDoSが可能です。以前からメールアドレスのチェックに利用する正規表現には注意喚起していましが、どの程度浸透していたのだろうか? ReDoSとは ReDoSはこのブログでも紹介しています。正規表現のアルゴリズムを利用してDoS攻撃する攻撃です。 参考: 正規表現を使ったDoS – ReDoS R

    StackExchangeが攻撃されたReDoSの効果
  • 正規表現でのメールアドレスチェックは見直すべき – ReDoS

    (Last Updated On: 2018年8月13日)前のエントリでStackExchangeがReDoSで攻撃されサイトがダウンした問題を紹介しました。少しだけ掘り下げて見たところ、正規表現だけでメールアドレスをチェックしている場合、壊滅的なReDoS(十分短い文字列で指数関数的に実行時間が増加する)が可能なことが判りました。 結論を書くと、正規表現でのメールアドレスチェックは見直すべき、です。(特にRubyユーザー) 追記:影響範囲はメールアドレスチェックに限らないので、正規表現チェックは全体的に見直さないと、どこが脆弱なのか判りません。見直してチェックしたとしても、それが完全であったと保証することは困難です。ネット検索して直ぐに見つかった検索パターンは非常に脆弱であったこと、メールアドレスのマッチパターンは脆弱になりやすい繰り返しの繰り返しが含まれること、これらがあったのでタイト

    正規表現でのメールアドレスチェックは見直すべき – ReDoS
  • ActiveRecordのSQLインジェクションパターン

    (Last Updated On: 2018年10月7日)Railsで多用されているActiveRecordのインジェクションパターンを簡単に紹介します。出典はrails-sqli.orgなのでより詳しい解説はこちらで確認してください。特に気をつける必要があると思われる物のみをピックアップしました。 Exists?メソッド User.exists? params[:user] params[:user]などの使い方は危険です。RailsPHPなどと同様にuser[]というパラメーターで配列化します。 ?user[]=1 が入力の場合、 SELECT 1 AS one FROM "users" WHERE (1) LIMIT 1 となり不正なクエリが実行されます。 Calculateメソッド CalculateメソッドはSQLの集約関数を実行するメソッドです。average、calcula

    ActiveRecordのSQLインジェクションパターン
    yuiseki
    yuiseki 2014/05/09
  • CasperJS/PhantomJSでシンタックスエラー行を取得する方法

    (Last Updated On: 2018年8月13日)CasperJSやPhantomJSを使っていてシンタックスエラーがあると [yohgaki@localhost ]$ casperjs test.js SyntaxError: Parse error と表示するだけでエラー行を返してくれません。 上記のエラーは以下のスクリプトで起きています。 [yohgaki@localhost]$ cat test.js var casper = require('casper').create(); casper.start('http://casperjs.org/', function() { this.echo(this.getTitle()); }); casper.thenOpen('http://kakaku.com', function() { this.echo(this.g

    CasperJS/PhantomJSでシンタックスエラー行を取得する方法
  • PHPセッションアダプションをスクリプト側で修正する方法

    (Last Updated On: 2018年8月13日)PHPのスクリプトを使ってアダプティブなPHPセッションをアダプティブにしない方法を紹介します。 このブログで紹介していたかどうか覚えていないですが、セッションアダプション対策としてsession_regenerate_id()が導入された時に議論・紹介されているので知っている方も多いと思います。(というより、PHPerの常識ですよね?) まずはセッションアダプションの原理と対策の復習をしておきます。 原理: 未初期化のセッションIDを受け入れる 対策: 初期化済みセッションIDのみ受け入れる session_regenerate_id()は新しいセッションIDを生成して新しいセッションクッキーを作成して、セッションデータを保存するようになっています。session_regenerate_id()を呼んだだけでは、なんらかの方法で複

    PHPセッションアダプションをスクリプト側で修正する方法
    yuiseki
    yuiseki 2011/11/07
  • DOMベースXSSの検出ツール

    (Last Updated On: 2011年11月3日)久しぶりにブログを更新すると色々書きたくなるものですね。ということでまだこのブログでは紹介したことがないDOMベースXSSのオープンソースツール、DOMinatorを紹介します。最近の商用ツールも類似の機能をサポートしています。 http://code.google.com/p/dominator/ DOMベースXSS: JavascriptはDOMを利用してHTMLを動的に変更できます。この機能を利用するとブラウザ側のJavascriptで動的に変化するWebサイトを構築できます。HTMLなどを修正するとデータにユーザが入力が含まれているとプログラマが意図しないJavascriptが実行できます。 要はクライアントサイドのJavascriptインジェクション攻撃の事です。 Javascriptは非常に柔軟な言語で便利な反面、セキュ

    DOMベースXSSの検出ツール
    yuiseki
    yuiseki 2011/11/05
  • Rails+Ruby 1.9では不正な文字エンコーディング攻撃で脆弱にならない理由

    (Last Updated On: 2018年8月8日)Rails+Ruby 1.9では不正な文字エンコーディング攻撃で脆弱にならない理由を詳しく解説されたブログエントリをまっちゃさんのブログで知りました。 入力で特には何もしていない事は知っていたので、出力時のどこかで全体をチェックできるような仕組みになっているのでは?と思っていたのですが、ETagの値を生成するコードの正規表現で例外が発生する、という事だそうです。 なぜRuby 1.9でエラーが起きるのか ActionController::Response#etag= メソッドの定義は下記のとおりです。 def etag=(etag) if etag.blank? headers.delete('ETag') else headers['ETag'] = %("#{Digest::MD5.hexdigest(ActiveSupport

    Rails+Ruby 1.9では不正な文字エンコーディング攻撃で脆弱にならない理由
  • PHP:既知のセキュリティ脆弱性 – Session Adoption

    (Last Updated On: 2018年8月13日)追記:より新しい情報については間違いだらけのHTTPセッション管理とその対策をどうぞ。 PHPには広く知られているにも関わらず放置されている既知のセキュリティ脆弱性が幾つかあります。その一つがセッションモジュールのセッションアダプション(Session Adoption)脆弱性です。この脆弱性は現在広く利用されているWebアプリケーションの安全性に、非常に大きな影響を与える脆弱性です。 セッションアダプション脆弱性とはセッション固定化攻撃を可能とする脆弱性の一種です。セッションアダプションに脆弱なセッション管理システムは、ユーザ(ブラウザ)が送信してきた未初期化のセッションIDを受け入れ、セッションを初期化してしまいます。PHPに限らず、RailsJavaのフレームワーク等、多くのWebフレームワークに発見されている脆弱性です。

    PHP:既知のセキュリティ脆弱性 – Session Adoption
  • 誤ったWAFの使い方 – 国連でも

    (Last Updated On: 2018年8月8日)WAF(Web Application Firewall)とは、通常のレイヤー2や3(IP, TCP/UDP)レベルのファイアーウォールよりもさらに上のレベルのアプリケーション層のファイアーウォールです。アプリケーションはレイヤー7とも言われ、ネットワークスイッチなどではアプリケーションの中身まで参照してスイッチングするスイッチはレイヤー7スイッチと呼ばれてきましたが、ファイアーウォールではレイヤー7ファイアーウォールと呼ばれる事は少なく、WAFと呼ばれる事が多いです。 WAFの目的は名前からも明白です。Webアプリケーションを脅威から守るために利用されます。WAFはWebアプリケーションをセキュリティ上の脅威から守る事ができますが、昔レイヤー2/3のファイアーウォールの能力が誇大に広告され、誤った認識で利用されていたように、WAFの

    誤ったWAFの使い方 – 国連でも
    yuiseki
    yuiseki 2010/09/09
  • SHA1でハッシュ化したパスワードは危険になった

    (Last Updated On: 2018年4月3日)パスワードを平文で保存するのは論外で、MD5やSHA1でハッシュ化するのは当たり前です。しかし、SHA1を2000倍早くクラックする方法などが発見され「SHA1は脆弱だ」(ちなみにMD5はもっと危険)とされてからしばらく経ちます。アメリカ政府や大手企業はSHA1は使わない、としています。 Slashdot.orgにまた載っているので更に高速化できた、ということか? 参考: RainbowテーブルによるMD5ハッシュのクラック(英語) RainbowテーブルによるSHA1ハッシュのクラック(英語) 前のエントリ PostgreSQLでSHA1 でPostgreSQLでSHA1を使う方法の一つを紹介していますが可能であればSHA512など、より強いハッシュ関数を利用したり、Saltを利用する、等の方法を採用した方が良いと思います。 備考:

    SHA1でハッシュ化したパスワードは危険になった
    yuiseki
    yuiseki 2010/04/05
  • PHPが文字エンコーディング攻撃に強い理由 – HTMLエスケープ

    (Last Updated On: 2018年8月13日)PHPが文字エンコーディング攻撃に比較的強い理由は入出力の文字エンコーディングのバリデーション(サニタイズ)が行えるだけではありません。PHPが提供するHTMLエスケープ関数が文字エンコーディング攻撃に対して強い事も理由の一つです。 PerlHTMLエスケープと言えば、<,>,&,”,’をエンティティ変換するコードが一番に見つかります。 「perl html escape」でググると一番に見つかったページは次のページです。このページではまだ3バイトEUCの場合の例、CGIモジュールを使った例も載っているので良い方でしょう。 http://saboten009.blogspot.com/2008/04/perlhtml-xss.html 少し前にPerl, Ruby,Pythonユーザは検索で有用なセキュリティ情報を得られるのか?と

    PHPが文字エンコーディング攻撃に強い理由 – HTMLエスケープ
  • yohgaki's blog - これからのプログラムの作り方 - 文字エンコーディング検証は必須

    (Last Updated On: 2016年3月3日)最近PostgreSQLMySQL両方にSJISエンコーディングを利用している際のエスケープ方法の問題を修正がリリースされています。この件は単純に「データベースシステムにセキュリティ上の脆弱性があった」と言う問題ではなく「アプリケーションの作り方を変える必要性」を提起した問題です。 参考:セキュアなアプリケーションのアーキテクチャ – sandbox化 PostgreSQLMySQLの脆弱性は特にSJIS等、マルチバイト文字に\が含まれる文字エンコーディングが大きな影響を受けますが、同類の不正な文字エンコーディングを利用した攻撃方法が他の文字エンコーディングでも可能です。例えば、UTF-8エンコーディングは1文字を構成するバイト列の最初のバイトの何ビット目までが1であるか、を取得してUTF-8文字として1バイト~6バイト必要なのか

    yohgaki's blog - これからのプログラムの作り方 - 文字エンコーディング検証は必須
    yuiseki
    yuiseki 2009/09/14
  • PHP 5.3の名前空間仕様が変更されました

    (Last Updated On: 2018年8月13日)名前空間に関する議論は5年以上も行われていたのですが、今度こそ結論が出たようです。 何故このようなエントリを書くかというと、Software Design(技術評論社)の11月号にPHPの最新情報としてα版PHP 5.3を紹介しているからです。入稿後に仕様変更があったので最新号の記事ですが既に内容が古くなってしまいました。 # とは言ってもまだ新しい仕様のPHPは無いですが α版なので仕様や機能が大きく変更される事もありますが大きな変更がありました。見誌が刷り上がった頃に名前空間の区切り文字が”::”だと静的にメソッドを呼び出す場合やクラス定数を呼び出す場合に困る場合がある、とPHP開発者のMLで議論になり始めました。 ML上、IRC上、オフラインの打ち合わせが行われ、数週間におよぶ議論の結果が昨日MLに投稿されました。名前空間の

    PHP 5.3の名前空間仕様が変更されました
    yuiseki
    yuiseki 2008/10/28
  • LAMPのPをPHPからPerl/Python/Rubyに替えるだけではセキュリティは向上しない証拠

    (Last Updated On: 2008年4月3日)誤解を招く記事 – LAMPセキュリティを強化する4つの方法で紹介した記事ように、最近「言語を替えるとセキュリティが向上する」といった間違った認識が広まりつつあるように思えます。 結論からいうと、セキュリティに関連する機能が同等な言語であれば「言語を替えるとセキュリティが向上するいう考え」は妄想です。言語を替えても、正しいセキュリティ知識を持ち合わせた開発者が開発しないと、危ないアプリケーションが簡単に作れます。 ちょうど良い証拠となるPloneのCVEエントリが公開されています。PloneはPythonで記述されたCMSです。私も利用したことがありますが、なかなかよくできているCMSです。出来立てのCMSではなく何年も前から実用されています。フレームワークとしてPythonのWebシステムよく利用されているZopeを利用しています。

    LAMPのPをPHPからPerl/Python/Rubyに替えるだけではセキュリティは向上しない証拠
    yuiseki
    yuiseki 2008/04/03
  • yohgaki's blog - 画像ファイルにJavaScriptを隠す

    (Last Updated On: 2014年12月5日)前回のエントリでイメージファイルにスクリプトを埋め込んで攻撃する方法について記載しましたが、最近イメージファイルにスクリプトを埋め込む事例が話題になったためか ha.ckersにJavaScriptをイメージファイルに隠す方法が紹介されています。 http://ha.ckers.org/blog/20070623/hiding-js-in-valid-images/ <script src="http://cracked.example.com/cracked.gif"> などとXSS攻撃を拡張する手段に利用可能です。サンプルとしてFlickerにJavaScriptを埋め込んだイメージファイルがアップされています。 このイメージファイルは上手く細工しているので画像としても表示され、JavaScriptも実行できます。 Flicke

    yohgaki's blog - 画像ファイルにJavaScriptを隠す
    yuiseki
    yuiseki 2007/06/25
  • yohgaki's blog - Sigres - PostgrSQLの高速化

    (Last Updated On: 2018年8月14日)新しいバージョンがリリースされたようです。 PostgreSQLのINSERT/UPDATEを高速化するSigresの0.1.3をリリースします。 http://sourceforge.jp/projects/sigres/ SigresはUPSの存在を前提に、信頼性を若干犠牲にする代わりに、挿入処理に関して大幅な性能向上を実現します。 いまなおpgsql-hackersからコメントをもらう段階にありますので、使用には注意してください コミットされたデータが絶対にないと困る、アプリもありますがそうでないもの多くあります。例えば、何かのログなどは電源トラブルで最後の方のコミット済みのログレコードがいくつか無くなるかも知れない程度で高速化できるのであれば十分なアプリも多くあると思います。Pgpoolなどでレプリケーションしているので一つ

    yohgaki's blog - Sigres - PostgrSQLの高速化
    yuiseki
    yuiseki 2007/03/11