タグ

*securityとc*に関するsh19910711のブックマーク (6)

  • 今流行りの投機実行脆弱性の影響を一切受けないDOOM実装が公開される

    https://github.com/xoreaxeaxeax/movfuscator/tree/master/validation/doom このDOOMは条件分岐を一切使用していない。したがって今流行りの投機実行の脆弱性であるMeltdownやSpectreによる脆弱性は存在しない。 ちなみに、現代の性能のコンピューターで、1フレームの描画に7時間ほどかかるので、このDOOMで遊ぶには若干の忍耐力を要求される。しかし、脆弱性の完全な排除のためには若干のパフォーマンスの低下はやむを得ないところだろう。 このDOOM実装はオリジナルのDOOMのCコードに若干の変更を施して、M/o/Vfuscatorでコンパイルしたものだ。 https://github.com/xoreaxeaxeax/movfuscator M/o/Vfuscatorとは、IntelのMMUがチューリング完全であることを

    sh19910711
    sh19910711 2023/01/20
    2018 / "このDOOMは条件分岐を一切使用していない / 現代の性能のコンピューターで、1フレームの描画に7時間ほどかかるので、このDOOMで遊ぶには若干の忍耐力を要求される / M/o/Vfuscator: mov命令のみを使うC言語コンパイラー"
  • FIO19-C. ファイルサイズの計算に fseek() および ftell() を使用しない

    FIO19-C. ファイルサイズの計算に fseek() および ftell() を使用しない ファイルストリームを操作する関数を使用するときには、テキストモードとバイナリモードの違いを正しく理解することが重要である(レコメンデーション「FIO14-C. ファイルストリームにおけるテキストモードとバイナリモードの違いを理解する」も参照)。 C99 [ISO/IEC 9899:1999] のセクション 7.19.9.2 は、バイナリモードでバイナリファイルを開いた場合の fseek() の特定の動作について次のように述べている。 バイナリストリームでは、whence が SEEK_END の値をもつ fseek の呼出しを意味あるものとしてサポートする必要はない。 さらに、セクション 7.19.3 の脚注 234 には次のように記載されている。 バイナリストリーム(ナル文字の詰め物が可能なた

    FIO19-C. ファイルサイズの計算に fseek() および ftell() を使用しない
  • パスワードとmemset関数 - yohhoyの日記

    C言語プログラム上で高機密性情報(パスワード文字列など)を消去するケースで、memset関数の単純利用では機密情報がメモリ上に残存してしまい、セキュリティ上の脆弱性につながる可能性がある。 void secure_operation() { // パスワード文字列を取得 char passwd[128]; get_password(passwd, sizeof(passwd)); //... // メモリ上の高機密データを消去... memset(passwd, 0, sizeof(passwd)); // ?? } 上記コードではパスワード文字列が格納された変数passwdを使用後にゼロクリアしているが、コンパイル時の最適化によりmemset関数呼び出しが削除される可能性がある。この(プログラマの意図に反する)最適化は、C言語の言語仕様上も許容されるコンパイラの振る舞いとなっている。*1

    パスワードとmemset関数 - yohhoyの日記
  • パスワードの判定にstrcmpを使うべきでない理由

    strcmpを使ってパスワードを判定すると、タイミング攻撃 (timing attack) にやられる危険性があることの説明 (約20分)。 まとめ: パスワードなどの文字列を strcmp関数 (およびそれに類する関数) を使って判定すると、 その判定にかかる時間を測定することで、パスワードが推測できてしまう場合がある。 これをタイミング攻撃 (timing attack) という。 この例では、36種類の文字を使った8文字分のパスワードを推測するのに、 通常のしらみつぶしな方法 (bruteforce attack) … 368 = 2821109907456回 の試行が必要なのに対して、 タイミング攻撃を使った方法 … 10000×8 = 80000回 しかかからない。タイミング攻撃を成功させてしまうと、 重要な情報が漏洩してしまう危険性がある。 これを防ぐためには、なるべく実行時間

  • 結局どうすりゃいいのさ (攻撃されないCFLAGS/LDFLAGS) - memologue

    最近のエントリの総まとめ。適当なネットワークデーモンなどを手動でmakeする際におすすめのgccのオプション。ソフトウェアにbuffer overflowをはじめとするありがちな欠陥があった場合でも、攻撃者にプロセスを乗っ取られないよう、コンパイラやカーネルで精一杯防御するためのCFLAGSとLDFLAGS。とりあえずFedora5以降を想定しています。 # 2006/6現在で私が把握しているものです。どんどん変化(進化)しますのでご注意。特にFedoraは。。 # 自分でフォローしたい場合、Hardened Gentooのページや、Fedoraのここは役立つと思います 基 上記のように、「多少遅くなってもセキュアなバイナリ希望」という場合、もともとのCFLAGS/LDFLAGSに加えて、 CFLAGS=-fstack-protector-all -O2 -fno-strict-alia

    結局どうすりゃいいのさ (攻撃されないCFLAGS/LDFLAGS) - memologue
  • IPA ISEC セキュア・プログラミング講座:C/C++言語編 第9章 ファイル対策:ファイルレースコンディション対策

    レースコンディションは、ある状態が成立しているという前提でプログラムが処理を行ったところ、実際には他のプロセスやスレッドによって状態が変更されていて、意図した処理が失敗してしまう問題のことである。 ファイルレースコンディションは、プログラムがファイルを取り扱う際に起こるレースコンディションである。Unix系およびGNU/Linux系のプラットフォームで標準的なファイル入出力APIを用いているプログラムで起こり得る。 ファイルのすり替え ファイルレースコンディションの典型的な例として、存在の有無や属性等の状況を確認した上でファイルをオープンするという場面で、確認とオープンの間の僅かな時間に対象がシンボリックリンクにすり替えられるというものがある。別の実体を指すシンボリックリンクに誘導されて想定外のファイルアクセスが起こり、被害が生じる。 これは次のようにして起こる。プログラムのアクセス先をシ

  • 1