LinEnum.shが行っているコマンドを調べてみた⑤
前回までのつづきにして今回で終わり.
【Dockerについての調査】
・grep -i docker /proc/self/cgroup 2>/dev/null; find / -name "*dockerenv*" -exec ls -la {} \; : 自身のプロセス, 要は今の自分がDockerコンテナ内にいるかどうかを調べている. cgroupsはLinuxカーネルに実装されているコンテナ関連の機能の一つで、複数のプロセスをグループ化してまとめてリソースの制限などを行える仕組み. 詳しくは以下の記事が詳しい.
https://gihyo.jp/admin/serial/01/linux_containers/0038
/proc/self/cgroupで所属しているcgroupsがわかる. おそらくDockerを使用していればわかるのであろう(未検証).
上が何も行っていない状態での/proc/self/cgroupで、下は"test01"という新たなcgroupを作成して現在のシェルを追加した後の/proc/self/cgroup.
また.dockerenvファイルの有無でもコンテナ内にいるか判断できるらしい.
・docker --version 2>/dev/null; docker ps -a 2>/dev/nul: 自分がdockerのホストかどうかを調査.
・id | grep -i docker 2>/dev/null: 現ユーザがdockerグループに属しているか調査. dockerグループに属するユーザはsudo無しでdockerコマンドを実行できる.
・find / -name Dockerfile -exec ls -l {} 2>/dev/null \; : Dockerfileを調査
・find / -name docker-compose.yml -exec ls -l {} 2>/dev/null \; : docker-compose.ymlはDockerfileの設定ファイル.
【LXCについての調査】
・grep -qa container=lxc /proc/1/environ 2>/dev/null : 自分がLXCコンテナ内にいるか判別. /proc/[pid]/environでそのプロセスの環境変数の一覧を得ることができる.
ちなみに/proc/[pid]/environで得られるのはプロセスの初期状態である. つまりプロセスが途中で追加した環境変数を得ることはできない.
・id | grep -i lxd 2>/dev/null: 自分がlxdグループに属するか確認. lxdグループに属するユーザはsudo無しでlxcコマンドを実行できる.
【スクリプトのオプション】
オプション無しでも十分使えるが、オプションによって追加の処理を行うことができる.
-k [keyword] : [keyword].conf, [keyword].php, [keyword].log, [keyword].ini ファイルについてマシン内の捜索を行う.
-r [report name] : 出力結果を[report name]-[dateの年]-[dateの月]-[date-日] という名称のファイルに出力(画面にも結果を出力する). シェルに色を付けるためのコード(?)まで出力に含まれるため, バイナリファイル扱いされる.
-e [export name] : [export name]/LinEnum-export-[dateの年]-[dateの月]-[date-日]/ ディレクトリ下に結果を出力する. それぞれのテスト分野に応じてディレクトリが分けられるので見やすくなる.
-s : sudo -lで, sudo権限で行えるコマンドの確認やその中で権限昇格に使えそうなコマンドを出力する. その代わりにパスワードの入力が必要となる.
-t : 普通の処理に加えて, 書き込み可能ファイルの列挙や自分が所属しているファイルの出力, 更にはsshの秘密鍵, AWSのアクセスキーやgitのクレデンシャルファイルの探索を行う. その分, 出力は冗長なものになる. 徹底的に捜索したい方にオススメ.
長々続いた謎解説も以上で終わり.
精進します.