
kernelpopは、以下のオペレーティングシステム上で自動カーネル脆弱性列挙とエクスプロイトを実行するためのフレームワークです:
Linux
Mac
python のバージョンに依存しないように設計されており、python2 と python3 の両方で動作するはずです。

$ git clone https://github.com/spencerdodd/kernelpop
$ cd kernelpop
$ python kernelpop.py || python3 kernelpop.py
$ git clone https://github.com/spencerdodd/kernelpop
$ cd kernelpop
$ ./create_executable.sh
$ ./kernelpop
pyinstaller をインストール (手順はビルドシステムにより異なります)$ pyinstaller kernelpop.py --onefile$ cp dist/kernelpop .どちらのバイナリビルド手順でも、プロジェクトルートに kernelpop というバイナリが作成されるはずです。
user@debian:~/Desktop/kernelpop$ python3 kernelpop.py
##########################
# welcome to kernelpop #
# #
# let's pop some kernels #
##########################
[*] grabbing distro version and release from underlying OS (linuxdebian7)
[*] grabbing kernel version from 'uname -a'
[+] kernel (Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.41-2 i686 GNU/Linux) identified as:
[base]
type: linux
distro: linuxdebian7
version: 3.2.0-4
architecture: i686
[specific]
type: linux
distro: linuxdebian7
version: 3.2.41-2
architecture: i686
[*] matching kernel to known exploits
[+] discovered 11 possible exploits !
[[ distro kernel matched exploit available ]]
CVE20165195_32 Dirty COW race condition root priv esc for 32 bit
[[ distro kernel version vulnerable ]]
CVE20144699 Exploitable race condition in linux before 3.15.4
CVE20143153 `futex_requeue` vulnerability before 3.14.6 allows for priv esc
CVE20162384 Double free vulnerability in the `snd_usbmidi_create` (requires physical proximity)
CVE20140196 `n_tty_write` vuln before 3.14.4 allows priv esc to root
CVE20132094_semtex perf_swevent_init Local root exploit (32 bit)
CVE20176074 `dccp_rcv_state_process` in net/dccp/input.c mishandles structs and can lead to local root
CVE20132094_32 perf_swevent_init Local root exploit (32 bit)
[[ base linux kernel vulnerable ]]
CVE20144014 `chmod` restriction bypass allows users to get root before 3.14.8
CVE20177308 `packet_set_ring` in net/packet/af_packet.c can gain privileges via crafted system calls.
CVE20171000112 ip_ufo_append_data() memory corruption flaw can be exploited to gain root privileges.
出力にはいくつかのカテゴリがあります。それぞれの意味は以下の通りです。
[[ ディストリビューションカーネルが一致し、エクスプロイトが利用可能 ]]
[[ ディストリビューションカーネルのバージョンに脆弱性あり ]]
[[ ベースLinuxカーネルに脆弱性あり ]]
python2 または python3
pyinstaller (バイナリをビルドする場合)
run modes:
(default) python3 kernelpop.py
(exploit-mode) python3 kernelpop.py -e {exploit name}
(dump-source) python3 kernelpop.py -e {exploit name} -d
(uname-mode) python3 kernelpop.py -u {uname -a output}
(interactive-mode) python3 kernelpop.py -i # LEGACY option (same as uname-mode)
other:
(playground path) -p {new path}
(json output file) --digest json
default モードは、ホストカーネルに関する情報を処理し、それをプログラムが既知のカーネルエクスプロイトと比較します。その後、潜在的に有用な脆弱性と付属のエクスプロイトのリストを出力します。
-e {exploit name}
exploit モードは、プログラム内で stdio のやり取りを行いながらエクスプロイトのソースコードを動的にコンパイルおよび実行します。また、短時間で中断された試行からの割り込みもキャッチできます。default モードでの最初の kernelpop 列挙実行時に表示されるエクスプロイトの名前を使用してください。
dump-source(オプション)-d
exploit モードの修飾子です。指定されたエクスプロイトのソースファイルを、それぞれ PLAYGROUND_PATH(デフォルトは /tmp)にダンプします。これは、ボックス上でエクスプロイトのソースを修正したり、手動操作や値のハードコーディングが必要なエクスプロイトを扱う場合に便利です。特にバイナリから実行する場合、プロジェクトのソースコード(つまりエクスプロイトのソース)にアクセスできないため、役立ちます。-u {uname -a output}
このオプションを使用すると、uname -a コマンドの出力をプログラムにインラインで渡すことができます。これにより、自動化スクリプトへの統合やその他の理由で使用可能になります。interactive mode の代替です。
uname 出力が必要]-i {uname -a output}
interactive モードでは、uname -a コマンドの出力のみで列挙を実行できます。これは、ホスト側のみの列挙ツールとして便利です。kernelpop を -i フラグ付きで起動し、要求されたときに uname -a の出力を渡すことで実行します。これはレガシー機能であり、uname mode に置き換えられましたが、-u は Mac の列挙をサポートしていないため、引き続きサポートされています。
PLAYGROUND パス-p {new PLAYGROUND_PATH dir}
-p オプションは、グローバル変数 PLAYGROUND_PATH の値を設定します。これは、すべてのエクスプロイトソースファイルが書き込まれ、エクスプロイトがコンパイルされる場所です。デフォルトでは /tmp に設定されています。ただし、この修飾子を使用して任意のディレクトリに設定できます。これは、/tmp に書き込みアクセス権がない場合に便利です。
--digest json
このオプションを使用すると、kernelpop 実行の結果を後処理のために消化可能な json ファイルにダンプできます。現時点では json ダンプのみを実装していますが、リクエストがあれば XML バージョンにも取り組む予定です。
エクスプロイトをさらに追加する! (src/to_add に追加したい人がいれば、ぜひどうぞ!)
脆弱性範囲の比較にパッチレベルを含める
誤った解析や敵対的な設定の場合に、検出された設定を上書きする方法を追加する
google: CVE-XXXX-XXXX "ubuntu"
canonical のリンクをクリック (https://people.canonical.com/~ubuntu-security/cve/2016/CVE-XXXX-XXXX.html)
usn.ubuntu.com にあるリンクされたすべてのアドバイザリをクリックし、情報を解析
バージョンごとに脆弱性範囲を埋めるためのパッチバージョンを取得
google: CVE-XXXX-XXXX "debian"
security-tracker.debian.org のリンク (https://security-tracker.debian.org/tracker/CVE-XXXX-XXXX)
google: CVE-XXXX-XXXX "mitre"
CVE-2017-1000379
CVE-2017-1000373
CVE-2017-1000372
CVE-2017-1000371
CVE-2017-1000370
CVE-2017-1000367
CVE-2017-1000112
CVE-2017-7308
CVE-2017-6074
CVE-2017-5123
CVE-2016-5195
CVE-2016-2384
CVE-2016-0728
https://github.com/SecWiki/linux-kernel-exploits
http://exploit-db.com/
https://github.com/lucyoa/kernel-exploits
https://github.com/SecWiki/windows-kernel-exploits
Debian
CVE-2015-1328
CVE-2014-4699
CVE-2014-4014
CVE-2014-3153
CVE-2014-0196
CVE-2014-0038
CVE-2013-2094
CVE-2010-4347
CVE-2010-2959
CVE-2009-1185