安全なWebサイトのつくりかた ざっくりまとめpart2
情報推進機構「安全なWebサイトのつくりかた」を読みましたが
情報量が多すぎて頭がフリーズしたので、現時点で最低限理解できる内容までを記録しておきます。
誰にでもわかるというより、僕が理解できる範囲で書いていますのでご了承ください。
Part1
https://qiita.com/E-46/items/93199f38bdacd6b6076a
2. OS コマンド・インジェクション
どんな脆弱性なのか
インジェクションとは「注入、投入する」の意味。
Webサイト上に設置された入力フォームにコマンド(OSへの命令文)を入力することで
WebサーバのOSに対して不正な命令を実行できてしまう脆弱性が存在します。
これを利用した攻撃がOS コマンド・インジェクションです。
SQLインジェクションはデータベースへの攻撃、
OS コマンド・インジェクションはOSへの攻撃と言えます。
OSへの命令は、シェル(bashとかcmdとか)を通して行われます。
本記事では、OSコマンドではなくシェルコマンドという表現を使用していきます。
(前提知識)シェルのコマンド連結について
シェルには複数のコマンドを連結する機能があり、
;(セミコロン)で区切ることで、2行のコマンドを1行にまとめることが可能です。
# セミコロンで区切って連結したコマンド
$ cd Users/vagrant ; vagrant up
# この2行のコマンドを順に実行する
$ cd Users/vagrant
$ vagrant up
具体的にどんな攻撃が想定されるのか
危険なのはシェルにパラメータを渡すような機能が実装されている場合です。
Rubyを使用した以下のような処理を考えてみます。
system("curl #{params[:url]}")
systemメソッドは引数をシェルのコマンドとして実行するメソッドです。
入力されたURLにGETリクエストを送ることを想定した処理ですが、脆弱性が存在します。
URLが正しく入力された場合
# このようなパラメータが渡された場合
params[:url] ===> http://hogehoge.com
# シェルはこのコマンドを実行する
curl http://hogehoge.com
この場合、http://hogehoge.com にGETリクエストを送るという想定通りの処理が行われます。
シェルのコマンドを含む文字列を入力された場合
# このようなパラメータが渡された場合が問題
http://hogehoge.com; rm -rf /
URLの後ろにセミコロンが含まれています。このパラメータを受け取ったシェルは
セミコロンから先は別の命令だと解釈し、次の2つの処理を行います。
# 1行目の処理(これは問題ない)
curl http://hogehoge.com
# 2行目の処理(こっちが問題)
rm -rf /
rm -rf/
についてですが、ルートディレクトリ下のデータがすべて消滅します。
OSに対しての命令が可能というのが、いかに重大な脆弱性であるかわかります。
どんな問題につながるのか
- サーバ内ファイル(設定ファイル)を改ざんされる
- サーバ内のパスワードが流出する
- ウィルス・ワームのダウンロード、実行が行われる
- サーバーが他システムへの攻撃への踏み台として使われる
注意すべきWebサイトの特徴
シェルを呼び出す関数を利用しているWebアプリケーション
別のプログラムを起動する関数を利用しているWebアプリケーション
対策
根本的な解決策として、そもそもシェルの呼び出し機能を使わない実装を行うこと。
シェルを起動する言語機能の利用を避ける
exec()
とか system()
とかopen()
とかが出てきたら要注意。
シェルを起動しない関数で代替できないか?を考えること。
外部プログラムを起動させるような処理についても、
クラスライブラリなどで代替できないか?を考慮すること。
処理を外部に頼らない設計を心がける。
想定したシェルの操作しか許可しないように限定する
やむを得ずシェルを起動する場合は、
許可したパラメータだけを通すホワイトリスト形式が推奨。
引数として渡される値の組み合わせをあらかじめ洗い出すことで、
それ以外の値が渡されることを許可しないように設定する。
ブラックリスト(許可しないものを設定しておく)は非推奨。
だいたいチェック漏れは起きるので、そこを突かれる恐れがある。
むずかしいですね。
参考
OSコマンドインジェクション
https://senmon.cfc.ac.jp//studentreport/report2/OS.html
https://f5.com/jp/education/glossary/glossary067-21548
OSコマンドインジェクション攻撃 ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/OS%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E6%94%BB%E6%92%83
Re: 脆弱性を見つけるコードレビュー(OSコマンドインジェクション) - pockestrap
https://pocke.hatenablog.com/entry/2017/05/01/183053
※コードはこちらを参考にさせていただきました
cmd /c rd /s /q c:\とは (バルスとは) [単語記事] - ニコニコ大百科
https://dic.nicovideo.jp/a/cmd%20%2Fc%20rd%20%2Fs%20%2Fq%20c%3A%5C
IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第6章 入力・注入対策:コマンド注入攻撃対策
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/501.html
Author And Source
この問題について(安全なWebサイトのつくりかた ざっくりまとめpart2), 我々は、より多くの情報をここで見つけました https://qiita.com/E-46/items/aa43b6a01de8ab205591著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .