gcc -D_FORTIFY_SOURCE=1 と -D_FORTIFY_SOURCE=2 の相違点
質問
誰か
gcc -D_FORTIFY_SOURCE=1
と
-D_FORTIFY_SOURCE=2
? だろう
=2
の方がより安全なのでしょうか?一点一点違いを列挙したリストは見つけられませんでした。
また、私は
-D_FORTIFY_SOURCE=2
は
-O2
でなければ、すべての機能が利用できないことになります。また、このサイトでは、リグレッションを詳細に指定したリストが見つかりませんでした。私は、特に
-Os
でコンパイルすることに興味があります。
これが文書化されている場所についてのどんなヒントでも歓迎します!
どのように解決するのですか?
機能テストマクロのマニュアルページより(
man 7 feature_test_macros
)
_FORTIFY_SOURCE
(glibc 2.3.4 以降)このマクロを定義すると、様々な文字列やメモリ操作関数を採用する際に、バッファオーバーフローエラーを検出するための軽量なチェックが行われます (例.
memcpy
,memset
,stpcpy
,strcpy
,strncpy
,strcat
,strncat
,sprintf
,snprintf
,vsprintf
,vsnprintf
,gets
およびそのワイドキャラクターバリアント)。いくつかの関数では、引数の一貫性がチェックされる。open
が提供されているかどうかをチェックします。 モード 引数が指定された場合、指定されたフラグにO_CREAT
. すべての問題が検出されるわけではなく、よくあるケースが検出されるだけです。もし
_FORTIFY_SOURCE
が1に設定されている場合、コンパイラ最適化レベル1(gcc -O1
) 以上で、適合するプログラムの動作を変更すべきでないチェックが実行されます。とは
_FORTIFY_SOURCE
を 2 に設定すると、より多くのチェックが行われますが、適合するプログラムによっては失敗するかもしれません。チェックのいくつかはコンパイル時に実行され (ヘッダーファイルに実装されたマクロロジックによって)、コンパイラの警告につながります。
このマクロを使用するには、コンパイラのサポートが必要で、それには
gcc
バージョン 4.0 以降で利用可能です。
さらに、記事 FORTIFY_SOURCEでアプリケーションのセキュリティを強化する (2014年3月)にはこうあります。
-
gcc -D_FORTIFY_SOURCE=1
はコンパイル時のみのチェックを追加します(いくつかのヘッダは#include <string.h>
) -
gcc -D_FORTIFY_SOURCE=2
実行時のチェックも追加(バッファオーバーフローを検出するとプログラムを終了させる)。
基本的には
_FORTIFY_SOURCE
レベル 2 はより安全ですが、ややリスクの高いコンパイル方法です。これを使用する場合は、コンパイルしたコードに対して非常に強力な回帰テストを行い、コンパイラが予期せぬ動作を導入していないことを証明するようにしてください。
関連
-
[解決済み] CC、gcc、g++の違いは?
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] GCC -fPIC オプション
-
[解決済み] ハッシュ化アルゴリズムと暗号化アルゴリズムの根本的な違い
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
-
[解決済み】Integrated Security = True と Integrated Security = SSPI の違いは何ですか?
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットにするルールがありません)
-
[解決済み】「ローカルシステム」アカウントと「ネットワークサービス」アカウントの違い?
-
[解決済み] ポーカーボットを倒す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Firebaseのデータ改変を制限するには?
-
[解決済み] ハッシュのソルトを隠蔽する必要性
-
[解決済み] REST API 呼び出しのセキュリティを確保するにはどうすればよいですか?
-
[解決済み] 認証と認可は違うのですか?
-
[解決済み] トークン・パラメータを含むhttpsのURL:どの程度安全か?
-
[解決済み] GETリクエストのクエリパラメータとしてurlにjwtを入れるのは安全ですか?
-
[解決済み] ウェブサイトの管理画面を保護するためのベストプラクティスとは?[クローズド]
-
[解決済み] 違法な配布からソフトウェアを守るには?[クローズド]
-
[解決済み] なぜ塩を使うと辞書攻撃が「不可能」になるのか?
-
[解決済み] なぜ間違ったパスワードのチェックは、正しいパスワードのチェックより時間がかかるのでしょうか?