カテゴリー: PHP Security

リクエストフォージェリを再考 – リクエストのインジェクションと考える

リクエストフォージェリを再考してみたいと思います。リクエストフォージェリには

  • SSRF(サーバーサイドリクエストフォージェリ)
  • CSRF(クロスサイトリクエストフォージェリ)
  • XXE(XMLエクスターナルエンティティ)

などがあります。これらは「リクエスト」を「偽装」(フォージェリ)する攻撃です。名前からは直感的にどのような攻撃なのかよく解らないですが、「攻撃リクエストのインジェクション」と考えると解りやすいと思います。

もっと読む

メソッド/関数呼び出しによるコード実行問題とその対策

言語の機能としてシリアライズされた”データ”からオブジェクトを生成(PHPの場合、unserialize関数)したり、呼び出すメソッド/関数を指定できる機能(PHPの場合、call_user_func関数/call_method関数など)を使ったりすると意図しないメソッド/関数が呼ばれるケースを想定しなければなりません。

もっと読む

インジェクション脆弱性の発生原理と対策 + ISO標準

インジェクション脆弱性の発生原理は簡単です。エンジニアではないマネージャー向けに作った資料を基に原理を紹介します。

インジェクション脆弱性は、その種類に関わらず原理は同じです。原理が同じということは、対策も同じです。一つ一つのインジェクション脆弱性がどのように作られ、攻撃されるのか?は少しずつ異なりますが、基本的な部分は同じです。別々に考えるより、一まとめに考えて理解した方が応用もでき、新しい仕組みなどが生まれた場合にも対応できます。

もっと読む

経営者・マネージャーが知るべき情報セキュリティ

追記:平成29年度の講座の情報は

をご覧ください。

岡山大学大学院のビジネスマインド養成講座の講義資料を公開します。

 

PDFダウンロードはこちら

誤字脱字、誤りなどがあったらご指摘頂けると助かります。

ISO 27000とセキュアプログラミング

セキュアプログラミングの啓蒙にも少々食傷気味ですが、今回もセキュアプログラミングの話題です。IPAのセキュアプログラミング講座Web編は削除予定であるとFacebookではお伝えしましたが、ブログではまだだったので合わせて紹介します。

ISO 27000がセキュアプログラミングついてどのように書いているのか紹介します。ISO 27000シリーズはISMS(Information Secuirty Management System – 情報セキュリティマネジメントシステム)認証の根幹となっている国際セキュリティ標準です。ISMS導入で自動的にセキュリティ問題に対応できる!といったモノではありませんが、体系的なセキュリティ導入にとても役立つ規格で2015年6月29日時点で4646組織の認証登録があります。

 

もっと読む

SMSを利用した2要素認証の脆弱性

SMSを利用した2要所認証を利用しよう、と検索される方も多いのでブログを書きます。SMSを利用した2要素認証の場合、Google認証システムを利用した場合に比べ、アプリの導入が不必要で容易に導入できます。しかし、リスクが高い部分があるので注意が必要です。

参考:今すぐできる、Webサイトへの2要素認証導入

もっと読む

IT以外のセキュリティ対策から学ぶITセキュリティ 〜害虫駆除より防虫〜

セキュリティ対策の基本はどの分野でもあまり変わりません。全体対策と個別対策、これらを総合的に駆使して安全性を維持します。全体対策、個別対策は両方とも”必要条件”です。全体対策だけ、個別対策だけ、では思ったような安全性を得ることは困難です。

ITセキュリティ以外の対策からITセキュリティについて考えてみます。

もっと読む

セキュアなソフトウェアアーキテクチャー

セキュアなソフトウェアアーキテクチャーに関するプレゼンを公開しました。

これだけだと契約プログラミングがどういうモノなのかよく分からないと思います。

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

を参考にしてください。

セキュリティ対策の目的と手段 〜 根本的誤りの元 〜

目的と手段、これを取り違えて大きな誤りを犯してしまうことはよくあります。これはセキュリティ対策に限ったことではありません。

対策をセキュリティ対策の目的と手段を取り違えると、根本的な誤りを犯してしまいます。

備考:目的と手段の取り違えが根本的な原因と言えますが、「セキュリティ対策」定義を取り違えているとこのブログの内容は理解しずらいかも知れません。セキュリティ対策に「緩和策」や「リスク増加」が含まれることを認識されていない方はまずセキュリティ対策の定義を確認ください。

参考:「個々の脆弱性対策だけやれば良い」とする議論に組みしない理由

もっと読む

容易に導入できるセキュア開発メソドロジー – SAMM

OpenSAMMのSAMMとはSoftware Assurance Maturity Model(ソフトウェア保証成熟度モデル)の略で名前の通り、成熟度モデルの一種です。成熟度モデルで有名な米カーネギーメロン大学のCMMI(Capability Maturity Model Integration – 能力成熟度モデル統合)同類の成熟度モデルに基づくセキュアなソフトウェア開発の方法論です。OpenSAMMはCMMIに比べるとかなり簡易化されており、小さな組織でも導入しやすいモデルになっています。

SAMMはプライバシーマーク認証やISMS認証を取得している組織でも有効です。これらの認証制度と重複している部分もありますが、ソフトウェア品質保証に特化したSAMMはより効果的かつ広範囲にセキュア開発をサポートできます。SAMMより広範囲な領域をサポートするCMMIを導入している組織には必要ありません。

私の会社では比較的導入しやすいセキュア開発メソドロジーであるSAMMを推奨し、導入サポートも行っています。SAMMは新しい物ではなく7年ほど前に最初のバージョンがリリースされており、当時から推奨しています。

もっと読む

「個々の脆弱性対策だけやれば良い」とする議論に組みしない理由

このブログを継続的に読んでいる方なら私が「個々のセキュリティ脆弱性対策も重要だが、基本的考え方や概念はより重要である」と考えていることがわかると思います。「個々の脆弱性対策だけやれば良い」とする議論がありますが、これには色々な欠陥があります。このため、「個々の脆弱性対策だけやる」では効果的なセキュリティマネジメントができません。つまり、より危険なセキュリティになってしまいます。

追記:このエントリだけではなぜマネジメントが大切なのかは伝わらないと思うので、容易に導入できるセキュア開発メソドロジー – OpenSAMM を書きました。こちらも参照ください。

もっと読む

入力バリデーションがセキュリティ対策かどうかは、”どうでもいい”!?

徳丸さんとの議論は終わっている いるので議論することはありません。しかし、 ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ というおかしなスライドが目に入ったのでコメントしておきます。今現在で2万近くのビュー回数もあると放っておけません。

”セキュリティ専門家”という肩書を持つ方が非論理的/非科学的な独自のセキュリティ理論を展開されるようでは、誤解してしまった開発者がセキュアでないコードを書いてしまいます。どのように非論理的/非科学的なのか簡単にコメントします。

 

もっと読む

ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション 〜 ただし出力対策も必須です 〜

入力バリデーションはセキュリティ対策として最も重要なセキュリティ対策です。なぜセキュリティ対策であるのか?を理解していない方も見かけますが「ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション」の効果と拡張方法を見れば解るのではないでしょうか?

ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイドで紹介しているセキュリティガイドラインでは入力バリデーションが最も重要なセキュリティ対策であるとしています。

厳格な入力バリデーションを行うと、開発者が意識しなくても、非常に多くの脆弱性を利用した攻撃を防止できます。今回は比較的緩い入力バリデーション関数でも、ほとんどのインジェクション攻撃を防止できることを紹介します。

重要:セキュア/防御的プログラミングでは入力と出力のセキュリティ対策は”独立”した対策です。どちらかをすれば良い、ではなく入力と出力の両方で対策を行います。よく誤解されるので注意してください。

重要 その2:ホワイトリストの基本中の基本は”デフォルトで全て拒否する”であることに注意してください。全て拒否した上で、許可するモノ、を指定しないとホワイトリストになりません。ホワイトリストによる入力バリデーションは”無害化”ではありません。”妥当性の検証”です。

重要 その3あまり広く理解されていませんが、セキュアコーディングの第1原則は「全ての入力をバリデーションする」、第7原則が「全ての出力を(エスケープ/API/バリデーションで)無害化するです。セキュアコーディングはISMS/PCI DSSなどの認証規格の要求事項です。

なぜこのようなブログを書いたか?というと入力バリデーションしていても、”ほぼ全てのインジェクション攻撃を無効化/防止できる入力バリデーション”でない場合、入力時のセキュリティ処理だけでは”残存リスク”としてインジェクション攻撃が可能になる、という事を理解して欲しいからです。

参考:

もっと読む