昨日、セキュリティの話をしていて当たり前のことですが見過ごしていた点を教えてもらいました。セキュリティ対策の必要条件と十分条件です。
-
IT以外のセキュリティ対策から学ぶITセキュリティ 〜害虫駆除より防虫〜
セキュリティ対策の基本はどの分野でもあまり変わりません。全体対策と個別対策、これらを総合的に駆使して安全性を維持します。全体対策、個別対策は両方とも”必要条件”です。全体対策だけ、個別対策だけ、では思ったような安全性を得ることは困難です。
ITセキュリティ以外の対策からITセキュリティについて考えてみます。
-
セキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャーに関するプレゼンを公開しました。
http://www.slideshare.net/yohgaki/ss-49863218
これだけだと契約プログラミングがどういうモノなのかよく分からないと思います。
を参考にしてください。
-
WordPressのGoogle Authenticatorを無効にする一番簡単な方法
このブログでは二段階認証にGoogle認証システム(スマホアプリ)とGoogle Authenticator(WordPressプラグイン)を使っています。携帯の修理でGoogle認証アプリを入れ忘れていたので、またブログにアクセスできなくなりました。前回はデータベースを直接操作してGoogle Authenticatorプラグインを無効にしたのですが、もっと簡単な方法があったので紹介します。
-
セキュリティ対策の目的と手段 〜 根本的誤りの元 〜
目的と手段、これを取り違えて大きな誤りを犯してしまうことはよくあります。これはセキュリティ対策に限ったことではありません。
対策をセキュリティ対策の目的と手段を取り違えると、根本的な誤りを犯してしまいます。
備考:目的と手段の取り違えが根本的な原因と言えますが、「セキュリティ対策」定義を取り違えているとこのブログの内容は理解しずらいかも知れません。セキュリティ対策に「緩和策」や「リスク増加」が含まれることを認識されていない方はまずセキュリティ対策の定義を確認ください。
-
容易に導入できるセキュア開発メソドロジー – 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などの認証規格の要求事項です。
なぜこのようなブログを書いたか?というと入力バリデーションしていても、”ほぼ全てのインジェクション攻撃を無効化/防止できる入力バリデーション”でない場合、入力時のセキュリティ処理だけでは”残存リスク”としてインジェクション攻撃が可能になる、という事を理解して欲しいからです。
参考:
-
Fedoraのrescueイメージとカーネルを更新する方法
Fedoraもfedupを使って簡単に更新できるようになって便利になりました。しかし、システムにインストールされているrescueイメージとカーネルが古くなっても更新されません。さすがにFedora22でFedora18頃のrescueイメージとかカーネルでは怖いので更新方法を調べてみました。
-
攻撃者がどうやって脆弱性を見つけ攻撃するのか、仕組みを知れば対策も解る
「攻撃者がどうやって脆弱性を見つけ攻撃するのか」これは比較的よくセキュリティ対策で解説されていることだと思います。本質を理解し、対策を考えます。
-
今時のShellcodeとセキュア/防御的プログラミング
コンピュータセキュリティのことを考えるとShellcode(シェルコード)のことを忘れる訳にはいきません。Shellcodeとはバッファーオーバーフローを利用してコンピューターに任意コードを実行させるコードの総称です。そもそもは/bin/shなどのシェルを奪うコードが主だったので、この種のコードはShellcodeと呼ばれています。現在はシェルを奪う物だけでなく、他の操作を行う物もShellcodeと呼ばれています
Shellcodeを作る方は、山があるから登るのと同じで、Shellcodeが作れるから作る、のだと思います。
私個人はShellcodeを作ること、使うことに全く興味はないです。しかし、Shellcodeとそれを利用した攻撃は、防御の為に興味を持っています。簡単に今どきのShellcodeはどのようになっているのかまとめます。
-
IoTでリクエストフォージェリが問題となる
今後WebシステムをインターフェースとするIoTデバイスが続々と出てくると思われます。その中で特に危惧しているセキュリティ問題があります。その1つがリクエストフォージェリです。
-
リクエストフォージェリ – SSRFとCSRF
リクエストフォージェリ(Request Forgery – リクエスト偽造)はかなり古くから知られている脆弱性です。恐らく1980年代から良く知られていたはずです。昔から知られているSSRFとCSRFの類似性を考えてみます。類似性を考えると、少し解りづらいCSRFも簡単に理解できるかも知れません。
-
ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイド
単純にこういった定義や標準があります、と紹介してもなかなか原文を参照することは敷居が高いです。このブログでも色々紹介できてきたので、ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイドなどをまとめて紹介します。