Osquery es una herramienta de monitoreo de amenazas de seguridad de código abierto desarrollada por Facebook. Se utiliza para consultar información del sistema, incluida la versión del sistema, la información del kernel, los procesos en ejecución, la información de la memoria, los puertos de escucha, los usuarios de inicio de sesión y más. Osquery ayuda a los administradores de sistemas a escribir consultas SQL para identificar, investigar y eliminar varios tipos de amenazas. Es compatible con varios sistemas operativos, incluidos Windows, Linux, FreeBSD y macOS.
En esta publicación, explicaremos cómo instalar y usar Osquery en Ubuntu 20.04.
Requisitos
- Un servidor Ubuntu 20.04 en Atlantic.Net Cloud Platform
- Una contraseña de root configurada en su servidor
Paso 1:crear el servidor en la nube de Atlantic.Net
Primero, inicie sesión en su servidor en la nube de Atlantic.Net. Cree un nuevo servidor, eligiendo Ubuntu 20.04 como sistema operativo con al menos 2 GB de RAM. Conéctese a su servidor en la nube a través de SSH e inicie sesión con las credenciales resaltadas en la parte superior de la página.
Una vez que haya iniciado sesión en su servidor Ubuntu 20.04, ejecute el siguiente comando para actualizar su sistema base con los últimos paquetes disponibles.
apt-get update -y
Paso 2:instalar Osquery
Primero, instale las dependencias requeridas usando el siguiente comando:
apt-get install gnupg2 software-properties-common wget unzip -y
A continuación, agregue la clave GPG de Osquery con el siguiente comando:
export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY
Luego, agregue el repositorio de Osquery a APT usando el siguiente comando:
add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
Una vez que se agrega el repositorio, actualice el repositorio e instale Osquery con el siguiente comando:
apt-get update -y apt-get install osquery -y
Paso 3:Conéctese a la Consola Osquery
Osquery proporciona un shell interactivo para ejecutar consultas y explorar el estado actual de su sistema operativo.
Puede conectarse al shell de Osquery usando el siguiente comando:
osqueryi
Una vez que esté conectado, debería obtener el siguiente resultado:
Using a virtual database. Need help, type '.help' osquery>
A continuación, muestre la configuración predeterminada de Osquery con el siguiente comando:
osquery> .show
Debería ver el siguiente resultado:
osquery - being built, with love. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ osquery 4.9.0 using SQLite 3.35.5 General settings: Flagfile: Config: filesystem (/etc/osquery/osquery.conf) Logger: filesystem (/var/log/osquery/) Distributed: tls Database: ephemeral Extensions: core Socket: /root/.osquery/shell.em Shell settings: echo: off headers: on mode: pretty nullvalue: "" output: stdout separator: "|" width: Non-default flags/options: database_path: /root/.osquery/shell.db disable_database: true disable_events: true disable_logging: true disable_watchdog: true extensions_socket: /root/.osquery/shell.em hash_delay: 0 logtostderr: true stderrthreshold: 0
Osquery tiene muchas tablas disponibles para consulta. Puede enumerarlos con el siguiente comando:
osquery> .tables
Salida de muestra:
=> acpi_tables => apparmor_events => apparmor_profiles => apt_sources => arp_cache => atom_packages => augeas => authorized_keys => azure_instance_metadata => azure_instance_tags => block_devices => bpf_process_events => bpf_socket_events => carbon_black_info => carves => chrome_extension_content_scripts => chrome_extensions => cpu_time => cpuid => crontab => curl => curl_certificate => deb_packages => device_file => device_hash => device_partitions => disk_encryption => dns_resolvers => docker_container_fs_changes => docker_container_labels => docker_container_mounts => docker_container_networks => docker_container_ports
Osquery tiene varios modos para mostrar el resultado de la consulta. Aquí, usaremos el modo de línea para mostrar la salida.
Para configurar el modo de línea, ejecute el siguiente comando:
osquery> .mode line
Paso 4:Cómo usar Osquery
Para obtener información sobre su sistema operativo en ejecución, ejecute:
osquery> SELECT * FROM system_info;
Salida de muestra:
hostname = ubuntu2004 uuid = a83cffe2-50f4-4fea-9ef4-423853fdc122 cpu_type = x86_64 cpu_subtype = 6 cpu_brand = QEMU Virtual CPU version 2.5+ cpu_physical_cores = 1 cpu_logical_cores = 1 cpu_microcode = 0x1 physical_memory = 2084278272 hardware_vendor = QEMU hardware_model = Standard PC (i440FX + PIIX, 1996) hardware_version = pc-i440fx-bionic hardware_serial = board_vendor = board_model = board_version = board_serial = computer_name = ubuntu2004 local_hostname = ubuntu2004
Para filtrar la salida de información del sistema, ejecute:
osquery> SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;
Salida de muestra:
hostname = ubuntu2004 cpu_type = x86_64 physical_memory = 2084278272 hardware_vendor = QEMU hardware_model = Standard PC (i440FX + PIIX, 1996)
Para mostrar la versión de su sistema operativo, ejecute:
osquery> SELECT * FROM os_version;
Salida de muestra:
name = Ubuntu version = 20.04 LTS (Focal Fossa) major = 20 minor = 4 patch = 0 build = platform = ubuntu platform_like = debian codename = focal arch = x86_64
Para mostrar la información de su núcleo, ejecute:
osquery> SELECT * FROM kernel_info;
Salida de muestra:
version = 5.4.0-29-generic arguments = ro net.ifnames=0 biosdevname=0 console=ttyS0 console=tty0 path = /boot/vmlinuz-5.4.0-29-generic device = UUID=29a0b164-1ba1-45a7-b23a-cdb98f23edbc
Para mostrar todos los puertos de escucha con el nombre del servicio y el PID, ejecute:
osquery> SELECT DISTINCT processes.name, listening_ports.port, processes.pid FROM listening_ports JOIN processes USING (pid) WHERE listening_ports.address = '0.0.0.0';
Salida de muestra:
name = unbound port = 53 pid = 3407 name = sshd port = 22 pid = 649 name = unbound port = 953 pid = 3407 name = darkstat port = 666 pid = 6100 name = darkstat port = 667 pid = 6109 name = apt-cacher-ng port = 3142 pid = 4071 name = ntpd port = 123 pid = 483
Para mostrar información del paquete de Apache, ejecute:
osquery> SELECT name, version FROM deb_packages WHERE name="apache2";
Salida de muestra:
+---------+-------------------+ | name | version | +---------+-------------------+ | apache2 | 2.4.41-4ubuntu3.4 | +---------+-------------------+
Para mostrar la información de la memoria del sistema, ejecute:
osquery> SELECT * FROM memory_info;
Salida de muestra:
+--------------+-------------+----------+-----------+-------------+-----------+-----------+------------+-----------+ | memory_total | memory_free | buffers | cached | swap_cached | active | inactive | swap_total | swap_free | +--------------+-------------+----------+-----------+-------------+-----------+-----------+------------+-----------+ | 2084278272 | 1358233600 | 44519424 | 520896512 | 0 | 406622208 | 222449664 | 495411200 | 495411200 | +--------------+-------------+----------+-----------+-------------+-----------+-----------+------------+-----------+
Para mostrar información de todas las interfaces de red, ejecute:
osquery> SELECT * FROM interface_addresses;
Salida de muestra:
+-----------+-------------------------------+-----------------------------------------+---------------+----------------+---------+ | interface | address | mask | broadcast | point_to_point | type | +-----------+-------------------------------+-----------------------------------------+---------------+----------------+---------+ | lo | 127.0.0.1 | 255.0.0.0 | | 127.0.0.1 | unknown | | eth0 | 69.87.221.220 | 255.255.255.0 | 69.87.221.255 | | unknown | | lo | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | | | unknown | | eth0 | fe80::200:45ff:fe57:dddc%eth0 | ffff:ffff:ffff:ffff:: | | | unknown | +-----------+-------------------------------+-----------------------------------------+---------------+----------------+---------+
Para verificar el tiempo de actividad del sistema, ejecute:
osquery> SELECT * FROM uptime;
Salida de muestra:
+------+-------+---------+---------+---------------+ | days | hours | minutes | seconds | total_seconds | +------+-------+---------+---------+---------------+ | 0 | 1 | 55 | 5 | 6905 | +------+-------+---------+---------+---------------+
Para enumerar todos los usuarios cuyo UID es mayor que 1000, ejecute:
osquery> SELECT * FROM users WHERE uid>=1000;
Salida de muestra:
+-------+-------+------------+------------+----------+-------------+--------------+-------------------+------+ | uid | gid | uid_signed | gid_signed | username | description | directory | shell | uuid | +-------+-------+------------+------------+----------+-------------+--------------+-------------------+------+ | 65534 | 65534 | 65534 | 65534 | nobody | nobody | /nonexistent | /usr/sbin/nologin | | | 65534 | 65534 | 65534 | 65534 | nobody | nobody | / | /usr/sbin/nologin | | +-------+-------+------------+------------+----------+-------------+--------------+-------------------+------+
Para verificar los últimos usuarios que iniciaron sesión, ejecute:
osquery> SELECT * FROM last;
Salida de muestra:
+----------+-------+------+------+------------+-----------------+ | username | tty | pid | type | time | host | +----------+-------+------+------+------------+-----------------+ | root | pts/0 | 1013 | 7 | 1629008887 | 106.213.193.155 | | root | pts/1 | 3372 | 7 | 1629010656 | 106.213.193.155 | | root | pts/2 | 4158 | 7 | 1629013021 | 106.213.193.155 | +----------+-------+------+------+------------+-----------------+
Para mostrar todos los usuarios registrados, ejecute:
osquery> SELECT * FROM logged_in_users;
Salida de muestra:
+-----------+----------+------------+------------------+------------+------+ | type | user | tty | host | time | pid | +-----------+----------+------------+------------------+------------+------+ | boot_time | reboot | ~ | 5.4.0-29-generic | 1629008369 | 0 | | init | | /dev/tty1 | | 1629008378 | 491 | | init | | /dev/ttyS0 | | 1629008378 | 484 | | login | LOGIN | ttyS0 | | 1629008378 | 484 | | login | LOGIN | tty1 | | 1629008378 | 491 | | runlevel | runlevel | ~ | 5.4.0-29-generic | 1629008383 | 53 | | user | root | pts/0 | 106.213.193.155 | 1629008887 | 1013 | | user | root | pts/1 | 106.213.193.155 | 1629010656 | 3372 | | user | root | pts/2 | 106.213.193.155 | 1629013021 | 4158 | +-----------+----------+------------+------------------+------------+------+
Conclusión
En la guía anterior, explicamos cómo instalar y usar Osquery para obtener datos del sistema operativo ejecutando consultas basadas en SQL. Es una herramienta muy útil y fácil de usar para encontrar puertas traseras, malware, procesos zombie y más. ¡Comience hoy con Osquery en su VPS de Atlantic.Net!