HOME»情報処理安全確保支援士掲示板»H30春午後1問1 設問2
投稿する
→「0x12345678」以降のアドレス(先頭アドレスが「0x12345678」)に
攻撃コードを書き込むことになります。
→上記の通りとなります。
→上記の通りとなります。
→上記の通りとなります。
→「0x12345678」以降のアドレス(先頭アドレスが「0x12345678」)に
攻撃コードが書き込まれます。
→上記で攻撃コードは書き込まれましたが、攻撃者としては攻撃コードを実行しなければなりません。
例えば、上記と同様の手法で関数テーブルのscanfの実行コードの先頭アドレスの値を
「0x12345678」に書き換えると、scanf関数が呼び出された際、
scanfの実行コードの先頭アドレスの値を取得しますが、その値が「0x12345678」であり
scanfを実行するつもりが、攻撃コードが実行されるという事になります。
→バッファオーバーフローはこの問の主題ではありませんが
メモリ上に攻撃コードを書き込む点は同じであり、
そういう意味の関係はあります。
H30春午後1問1 設問2 [0640]
やさかさん(No.1)
この問題ですが、プログラミング経験があまりないため、
問題文でやっていることがあまりよくわかりません。
以下のような認識でよいでしょうか?
設問2
・ここでやりたいことは、「0x12345678」のアドレスに、
画面で入力した攻撃コードを書き込むこと。
・RegisterNameの入力値のバイト列は「785634120a」になるので、
実際の操作では「xV4(DC…装置制御2)(LF…改行)」という文字列を
画面で入力。
・name[0]…x name[1]…V name[2]…4 name[3]…DC
が文字配列の各要素にそれぞれセットされる。(改行は読み捨て)
・2回目のRegisterNameの呼び出しでは、
nameにすでにアドレス値がセットされているため、
2番目のif文内の処理だけ実行される。(20行目)
・今、nameが指すアドレスは「12345678」のため、
「12345678」に2回目のRegisterNameでの入力値(攻撃コード)
が書き込まれる。(下線②の内容)
下線①、②の内容と、後述の共有ライブラリの関数テーブルは関係ない気が
するのですが、その認識であっていますか?
また、バッファオーバーフローは今回の攻撃手法(Use-After-Free)
と関係あるのでしょうか?
問題文でやっていることがあまりよくわかりません。
以下のような認識でよいでしょうか?
設問2
・ここでやりたいことは、「0x12345678」のアドレスに、
画面で入力した攻撃コードを書き込むこと。
・RegisterNameの入力値のバイト列は「785634120a」になるので、
実際の操作では「xV4(DC…装置制御2)(LF…改行)」という文字列を
画面で入力。
・name[0]…x name[1]…V name[2]…4 name[3]…DC
が文字配列の各要素にそれぞれセットされる。(改行は読み捨て)
・2回目のRegisterNameの呼び出しでは、
nameにすでにアドレス値がセットされているため、
2番目のif文内の処理だけ実行される。(20行目)
・今、nameが指すアドレスは「12345678」のため、
「12345678」に2回目のRegisterNameでの入力値(攻撃コード)
が書き込まれる。(下線②の内容)
下線①、②の内容と、後述の共有ライブラリの関数テーブルは関係ない気が
するのですが、その認識であっていますか?
また、バッファオーバーフローは今回の攻撃手法(Use-After-Free)
と関係あるのでしょうか?
2021.04.08 05:11
関数従属さん(No.2)
>・ここでやりたいことは、「0x12345678」のアドレスに、
>画面で入力した攻撃コードを書き込むこと。
→「0x12345678」以降のアドレス(先頭アドレスが「0x12345678」)に
攻撃コードを書き込むことになります。
>・RegisterNameの入力値のバイト列は「785634120a」になるので、
>実際の操作では「xV4(DC…装置制御2)(LF…改行)」という文字列を
>画面で入力。
→上記の通りとなります。
>・name[0]…x name[1]…V name[2]…4 name[3]…DC
>が文字配列の各要素にそれぞれセットされる。(改行は読み捨て)
→上記の通りとなります。
>・2回目のRegisterNameの呼び出しでは、
>nameにすでにアドレス値がセットされているため、
>2番目のif文内の処理だけ実行される。(20行目)
→上記の通りとなります。
>・今、nameが指すアドレスは「12345678」のため、
>「12345678」に2回目のRegisterNameでの入力値(攻撃コード)
>が書き込まれる。(下線②の内容)
→「0x12345678」以降のアドレス(先頭アドレスが「0x12345678」)に
攻撃コードが書き込まれます。
>下線①、②の内容と、後述の共有ライブラリの関数テーブルは関係ない気が
>するのですが、その認識であっていますか?
→上記で攻撃コードは書き込まれましたが、攻撃者としては攻撃コードを実行しなければなりません。
例えば、上記と同様の手法で関数テーブルのscanfの実行コードの先頭アドレスの値を
「0x12345678」に書き換えると、scanf関数が呼び出された際、
scanfの実行コードの先頭アドレスの値を取得しますが、その値が「0x12345678」であり
scanfを実行するつもりが、攻撃コードが実行されるという事になります。
>また、バッファオーバーフローは今回の攻撃手法(Use-After-Free)
>と関係あるのでしょうか?
→バッファオーバーフローはこの問の主題ではありませんが
メモリ上に攻撃コードを書き込む点は同じであり、
そういう意味の関係はあります。
2021.04.08 22:30