【書名;サイバー攻撃②】文字列の整形機能という初耳のトピック💦
こんにちは、ペンギン男です🐧
この本のテーマは「ソフトウェアの脆弱性」です。こういうテーマだと、もっとセキュリティを高めようみたいな、ざっくりした話も多いですが、ここでは、可能なだけ、具体性をもってスタディできればと考えています。
サイバー攻撃 ネット世界の裏側で起きていること (ブルーバックス)
- 作者: 中島明日香
- 出版社/メーカー: 講談社
- 発売日: 2018/01/18
- メディア: 新書
- この商品を含むブログ (2件) を見る
出典はアマゾンさん。
【目次】
サイバー攻撃の典型例「バッファオーバーフロー」のレビュー
前回の投稿で、サイバー攻撃される典型例として、バッファオーバーフローについて投稿しました。要は、情報を格納すべき箱に、制限オーバーの情報を意図的であれ、意図的でないにせよ、格納してしまったことで生じるリスクのことです。
ここでは、そんなバッファオーバーフローに続いて紹介される脆弱性のサンプルを扱います。このサンプルは、その出現頻度がかなり多いか、もしくはサイバー攻撃に特徴的な性質を備えていることでしょう。
具体的には、脆弱性の第二の例として、文字列の整列機能が挙げられています。へー、色々あるのですね。単なる初級編でも💦
文字列の整形機能とは?
文字列の整形機能ではありますが、その中でも、特に、書式指定文字列に脆弱性が認められるようです。
具体的になにかと言えば、
✖︎アイウエオ順とかアルファベット順となどルールで、文字列の並びを再編成する機能ではなく
○どのような形の形式の文字列としてデータを出力・表示するかを指定する機能です。例えば、同じ「1」でも
一文字として出力するか
文字列として出力するか
2進数で出力するか
8進数で出力するか
16進数で出力する
実数として出力するか
アドレス値として出力するか
などなど、本当に多彩な形式でアウトプットできる機能を備えています。これを書式指定文字列と呼ぶそうです。
何が問題なのか?何が脆弱性につながるのか?
P-109
「%n」はprintfなどの書式指定文字列を使用する関数にて「%n」に到達する前に何バイトのデータが書き出されたかを、引数で指定した変数に格納します
例えば「HelloWorld!」なら、この文字数である「11」が格納されるとか。ここらあたりまでは分かりますね。
P-111
実際に「%d」を入力して実行すると(中略)「%d」ではなく、「-1081871791」言う不思議な文字列が出力されました。これは「%d」という文字列ですがprintf関数によって、単なる文字列ではなく、書式指定子として解釈されてしまったことに起因します
どうやら、もともと格納予定だった情報量を上回る情報量を与える効果があるようです。でも、これどこかで聞いた話。
P-120
書式指定文字列の脆弱性を利用する場合も、基本的な流れはバッファオーバーフローのときと変わりありません
要は、もともと予定していた以上の情報量を流入させて、若い順番で格納されていた情報をキックアウトし、その余白にマルウェアを仕込むという手順ですね。
シェルコードという攻撃用コードには、かえってオールド・ファッションのプログラミング言語が活用されるらしい
だんだん攻撃が高度化していくと、そのテクニックやツールも高度化しそうなものですが、必ずしも、そういう訳ではないようです。
P-91
シェルコードとして利用できる命令列には様々な制約があるため、C言語ではなくアセンブリ(assembly)と呼ばれる低級言語(より機械語に近いプログラミング言語)で、直接人が書くのが一般的です
たしかに、同じデータでも紙に書いたものはハッキングされないので、敢えてそういう選択肢を取るケースもあるそうです。
最後に
改めて思うのは、デジタルは本当に「総論」を受け付けませんね。あくまで「ディテール」あくまで「各論」でないと話が進みません。
このことは、しかと胸に受け止める必要あること再認識しました。
#プログラミング
#データベース
#ネットワーク
#シェルコード
#文字列の整形機能
#脆弱性
#書式指定文字列