
framework de enumeração e exploração de escalonamento de privilégio do kernel
kernelpop é um framework para realizar enumeração e exploração automatizada de vulnerabilidades de kernel nos seguintes sistemas operacionais:
Linux
Mac
Foi projetado para ser independente de versão do python, ou seja, deve funcionar tanto com python2 quanto com 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 (os passos variam conforme o sistema de compilação)$ pyinstaller kernelpop.py --onefile$ cp dist/kernelpop .ambos os passos de compilação de binário devem criar um binário kernelpop na raiz do projeto.
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.
Na saída, existem algumas categorias. Aqui está o que cada uma significa
[[ distro kernel matched exploit available ]]
[[ distro kernel version vulnerable ]]
[[ base linux kernel vulnerable ]]
python2 ou python3
pyinstaller (se quiser compilar um binário)
modos de execução:
(padrão) python3 kernelpop.py
(modo-exploit) python3 kernelpop.py -e {nome do exploit}
(dump-source) python3 kernelpop.py -e {nome do exploit} -d
(modo-uname) python3 kernelpop.py -u {saída de uname -a}
(modo-interativo) python3 kernelpop.py -i # OPÇÃO LEGADO (igual ao modo-uname)
outros:
(caminho playground) -p {novo caminho}
(arquivo de saída json) --digest json
O modo padrão processa informações sobre o kernel do host e as compara com os exploits de kernel conhecidos disponíveis
para o programa. Em seguida, gera uma lista de vulnerabilidades potencialmente úteis e exploits anexados.
-e {nome do exploit}
O modo exploit compila e executa dinamicamente o código-fonte do exploit com interações stdio dentro do programa.
Ele também pode capturar interrupções de tentativas interrompidas prematuramente. Use o nome do exploit que aparece na
execução inicial de enumeração do kernelpop no modo padrão.
dump-source (opção) -d
exploit. Ele despeja os arquivos-fonte para o exploit dado em seus respectivos
arquivos em PLAYGROUND_PATH (padrão /tmp). Isso é útil para modificar o código-fonte do exploit em uma máquina ou trabalhar
com exploits que exigem interação manual ou codificação de valores. É especialmente útil ao executar
a partir de um binário, pois você não terá acesso ao código-fonte do projeto (ou seja, fonte do exploit).-u {saída de uname -a}
Esta opção permite passar a saída de um comando uname -a inline para o programa, o que o torna utilizável para
integração em scripts automatizados ou para qualquer outro motivo previsível. Substituição do modo interativo.
uname]-i {saída de uname -a}
O modo interativo permite realizar enumeração apenas com a saída de um comando uname -a,
o que o torna útil como uma ferramenta de enumeração apenas do lado do host. Isso é executado iniciando o kernelpop com a flag -i
e, em seguida, passando a saída de uname -a quando solicitado. Este é um recurso legado e substituído pelo modo uname, mas permanece
suportado, pois -u não oferece suporte à enumeração em Mac.
PLAYGROUND-p {novo diretório PLAYGROUND_PATH}
A opção -p define o valor da variável global PLAYGROUND_PATH. Este é o local onde todos os arquivos-fonte dos exploits
são gravados e os exploits compilados. Por padrão, é definido como /tmp. No entanto, você pode defini-lo para qualquer
diretório com este modificador caso não tenha permissão de escrita em /tmp.
--digest json
Esta opção permite despejar os resultados de uma execução do kernelpop em um arquivo JSON digerível para processamento posterior. Até
agora, implementei apenas o dump json, mas vou trabalhar em uma versão XML se for solicitada.
adicionar mais exploits! (src/to_add se alguém quiser começar a trabalhar em alguns deles, fique à vontade!)
incluir níveis de patch em comparações de janelas vulneráveis
adicionar maneira de substituir configurações detectadas em caso de análise incorreta ou configurações adversas
google: CVE-XXXX-XXXX "ubuntu"
clique no link da canonical (https://people.canonical.com/~ubuntu-security/cve/2016/CVE-XXXX-XXXX.html)
clique em todos os avisos vinculados em usn.ubuntu.com e analise as informações
pegue as versões de patch para preencher as janelas de vulnerabilidade por versão
google: CVE-XXXX-XXXX "debian"
link do 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