PWNのインストールと最新のchecksecの使用

インストールする

gitでインストール

$ git clone https://github.com/slimm609/checksec.sh.git

ファイルを入力してください

cd checksec.sh

ここに画像の説明を挿入
次のコマンドを実行し、コマンドラインでシンボリックリンクを確立して、ターミナルで直接使用します

sudo ln -s checksec /usr/local/bin/checksec
#或者sudo ln -sf checksec /usr/local/bin/checksec

/ usr / local / bin /でchecksecを見つけて開くことができることを確認してください。そうでない場合は、copyコマンドを使用して過去のコピーを強制できます。
ここに画像の説明を挿入
ここに画像の説明を挿入

使用する

checksec filename

レッヒ

プログラムのアーキテクチャ情報、64ビットか32ビットかを判断し、expが書き込まれたときにp64またはp32を判断します。

RELRO

Relocation Read-Onl(RELRO)この技術は、主にGOTの書き換え攻撃方法を目的としており、Partial RELROとFULL RELROの2種類に分けられます。Partial
(partial)RELROは攻撃に対して脆弱です。 / bin / sh \ x00シェルを取得するには、完全なRELROでGOT全体を読み取り専用にします。これは上書きできませんが、プログラムは開始前にすべてのシンボルを解決する必要があるため、プログラムの起動時間が大幅に増加します。

gcc -o hello test.c //默认情况下,是Partial RELRO
gcc -z norelro -o hello test.c // 关闭,即No RELRO
gcc -z lazy -o hello test.c // 部分开启,即Partial RELRO
gcc -z now -o hello test.c // 全部开启,即Full RELRO

スタックカナリア

スタックオーバーフロー保護は、バッファーオーバーフロー攻撃を緩和する方法です。関数にバッファーオーバーフロー攻撃の脆弱性がある場合、攻撃者はスタックの戻りアドレスを上書きしてシェルコードを実行できます。スタック保護が有効になると、関数の実行が開始されます最初に、同様のCookie情報がスタックに挿入されます。関数が戻ると、Cookie情報が正当かどうかが検証されます。それが有効でない場合、プログラムは実行を停止します。攻撃者が戻りアドレスを上書きすると、Cookie情報が上書きされ、スタックが引き起こされることがよくあります車の検査の失敗を保護し、シェルコードの実行を防ぐために、Linuxではcookie情報をカナリアと呼びます。

gcc -fno-stack-protector -o hello test.c   //禁用栈保护
gcc -fstack-protector -o hello test.c    //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码
gcc -fstack-protector-all -o hello test.c  //启用堆栈保护,为所有函数插入保护代码

NX

NXが有効この保護がオンになっている場合、それはスタック内のデータに実行権限がないことを意味します。このようにして、攻撃者がスタックにシェルコードを展開してトリガーすると、知恵によってプログラムが直接クラッシュしますが、ropを使用してバイパスすることができます。

gcc -o  hello test.c // 默认情况下,开启NX保护
gcc -z execstack -o  hello test.c // 禁用NX保护
gcc -z noexecstack -o  hello test.c // 开启NX保护

パイ

PTE(Position-Independent Executable)テクノロジーはASLRテクノロジーに似ています。ASLRはプログラムのランタイムスタックと共有ライブラリのロードアドレスをランダム化し、PIEはコンパイル時にプログラムを即座にコンパイルして位置に依存しないようにします。プログラムの実行中、各セグメント(コードなど)の仮想アドレスは、ロード時に決定されます。つまり、PIEとASLRが同時に有効になっている場合、攻撃者はプログラムのメモリレイアウトを認識できず、攻撃者はプログラムの.gotセクションの仮想アドレスを取得できないため、GOTエントリの従来の書き換えは困難です。開始する場合、通常、攻撃中に十分なアドレス情報が必要です

gcc -o hello test.c  // 默认情况下,不开启PIE
gcc -fpie -pie -o hello test.c  // 开启PIE,此时强度为1
gcc -fPIE -pie -o hello test.c  // 开启PIE,此时为最高强度2
(还与运行时系统ALSR设置有关)

新しいバージョンは以前のchecksecとは異なり、いくつかのオプションがあります。公式ドキュメントを参照することをお勧めします
ここに画像の説明を挿入

RPATH / RUNPATH

プログラムが実行されている環境変数。実行中に必要な共有ライブラリファイルは、このディレクトリから優先的に検索されます。偽のlibは攻撃を引き起こす可能性があります。例:攻撃ケース

頑固

これは、GCCによって実装されたソースレベルの保護メカニズムです。その機能は、コンパイル中にソースコードをチェックして、潜在的なバッファオーバーフローエラーを回避することです。
この保護を追加した後、read、fgets、脆弱性を引き起こす可能性のあるmemcpy、printfなどの関数は、__ read_chk、__ fgets_chkなどに置き換えられます。
これらの関数はchkを使用して、読み取り/コピーされたバイトの長さがバッファーの長さを超えているかどうかを確認します。%nなどの文字列TVがユーザーが変更できる書き込み可能なアドレスにあるかどうかを確認することにより、フォーマットされた文字列は回避されます直接(%7 $ x)などの一部の機能や、脆弱性の発生を回避するその他の方法をスキップします。FORTIFT保護がオンになっているプログラムは、checksecによってチェックアウトされます。さらに、取得したテーブルで逆コンパイルを直接表示すると、chk関数の存在もわかります。このチェックはデフォルトでは有効になっておらず、合格できます。

gcc -D_FORTIFY_SOURCE=2 -O1
开启fortity检查,开启后会替换strcpy等危险函数。

まとめ

さまざまな安全オプションのコンパイルパラメータは次のとおりです。

  • NX:-z execstack / -z noexecstack(閉じる/開く)
  • Canary:-fno-stack-protector / -fstack-protector / -fstack-protector-all(閉じる/開く/完全に開く)
  • PIE:-no-pie / -pie(オフ/オン)
  • RELRO:-z norelro / -z lazy / -z now(閉じる/部分的に開く/完全に開く)
元の記事を35件公開 3を獲得 3300を表示

おすすめ

転載: blog.csdn.net/qq_43430261/article/details/105516051