teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤記訂正

2016/11/28 01:45

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  - バッファーオーバーラン
6
6
  例に挙げられた関数はいずれもバッファーオーバーランを起こす可能性がありますね。このような関数はどのくらいあるかというと「無数にある」というのが自分の認識です。自分の考えは「どの関数が危険か覚える」のは有効な手段でなく、「自分が使う全ての関数の動作と仕様を正確に知る」姿勢と実践が有効だと思います。バッファーオーバーランの脆弱性についてはよくおわかりだと思いますが、ポインターを用いる関数はその仕様をきちんとおさえていない限り全て脆弱性を持つ実装になり得ると考えても過言ではないと思いませんか?
7
- ポインターを直接扱えるというC,C++の特徴は効率上の大きな利点ですがバグで簡単にメモリーを破壊できてしまう点およびどのように破壊されるかが予想できる点(C/C++のランタイムはブラックボックスではない)が脆弱性に繋がりやすくなることから諸刃の剣といえると思います。これはどの関数が危険かというより「全てのポインターを用いる実装において不当なアドレスを参照しないように作られなければならない」ぐらいに認識しておくべきのことだと自分は思います。脆弱性に繋がるかどうかの前の段階の話(バグを無くすという話)ですが。
7
+ ポインターを直接扱えるというC,C++の特徴は効率上の大きな利点ですがバグで簡単にメモリーを破壊できてしまう点およびどのように破壊されるかが予想できる点(C/C++のランタイムはブラックボックスではない)が脆弱性に繋がりやすくなることから諸刃の剣といえると思います。これはどの関数が危険かというより「全てのポインターを用いる実装において不当なアドレスを参照しないように作られなければならない」ぐらいに認識しておくべきのことだと自分は思います。脆弱性に繋がるかどうかの前の段階の話(バグを無くすという話)ですが。
8
8
 
9
9
  - バッファーオーバーランは全て脆弱性なのか
10
10
  全てのオーバーランのバグが脆弱性になるわけではないですね?第三者が特定の計算機に外部から攻撃する際に通過しなければならないソフトウェア(実装が公開されているOS,言語,フレームワーク)にバッファーオーバーランになるような実装が存在していたときは直ちにそれが脆弱性になると思います。しかしそうでないもの(ソースが公開されていない,外部から入力が与えられるようなものでない,etc.)はバグではありますが脆弱性となる危険度は下がると思います。