Гостевая статья Анализ атак на мой сайт

Анализ атак на мой сайт

Недавно я проводил аудит безопасности в своем блоге и решил немного углубиться в свои журналы безопасности. С небольшим количеством команд Linux, кунг-фу, немного Golang и листами Google, я смог получить довольно хорошее представление о том, откуда происходят атаки.

Для начала я использую CentOS для размещения своего сайта, поэтому я проверил / var / log / secure. В этом журнале хранятся журналы аутентификации на моем сервере.

Вот как выглядит файл журнала:


Получив 301,327 строк маловероятно, что я буду все аналировать вручную. Давайте немного автоматизируем это.

Получение IP-адреса злоумышленников
Я хотел извлечь IP-адрес злоумышленников из этого файла. Таким образом, я могу заблокировать их.

Я начал возиться с командами Linux, пока не придумал .

То, что он делает, довольно просто, он будет искать эти строки:
Код:
declare -a badstrings=("Failed password for invalid user"
                "input_userauth_request: invalid user"
                "pam_unix(sshd:auth): check pass; user unknown"
                "input_userauth_request: invalid user"
                "does not map back to the address"
                "pam_unix(sshd:auth): authentication failure"
                "input_userauth_request: invalid user"
                "reverse mapping checking getaddrinfo for"
                "input_userauth_request: invalid user"
                )
Это строки, которые идентифицируют журналы неудачных атак. Если они введут неправильное имя пользователя или попробуют другую форму атаки, у него будет одна из этих строк.

Поэтому мы перебираем этот список и ищем эти строки, а затем извлекаем IP-адрес из строки, в которой эта строка существует.
Код:
cat /var/log/secure | grep "$i" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '{print $0}' | sort | uniq >> "temp.txt"
Затем он записывает IP-адрес в файл temp.txt . Это будет сделано для всех сообщений, которые у меня есть в моем списке «плохих строк».

В этом текстовом файле было множество дубликатов, поэтому я удалил дубликаты и поместил в файл только уникальные IP-адреса:
Код:
# grab unique ips from temp and put them in a file
cat "temp.txt" | sort | uniq > "badguyips.txt"
# remove the temp file
rm "temp.txt"
Круто, теперь у меня есть список IP-адресов, готовых к работе.


Да, у меня здесь 1141 IP-адрес.

Блокировка их
Теперь я хочу заблокировать эти IP-адреса. Так как я использую iptables, я могу просто удалить их с помощью этого простого скрипта:
Код:
#!/bin/bash
input="badguyips.txt"
while IFS= read -r line
do
  iptables -A INPUT -s $line -j DROP
done < "$input"

service iptables save
Здорово. Теперь злоумышленники заблокированы на моем сервере.

Тогда мне стало любопытно. Откуда эти атаки?

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

Я написал эту программу Golang под названием «найди плохих парней», которая будет просматривать текстовый файл IP-адресов, искать информацию об их местонахождении, а затем записывать в серию текстовых файлов.

Я выписал места на основе:
  • континент
  • страны
  • Города
  • Районы городов
Я хотел посмотреть, откуда происходят атаки, и поделиться этой информацией. поэтому я запустил созданную мной программу, и теперь у меня есть несколько полезных списков информации о местоположении:
r4yl9r8o9t357feaylmb.jpg

Континенты
Итак, теперь я хочу взглянуть на continents.txt.


Ну, это будет проблемой, есть некоторые дубликаты.

Я могу выполнить быструю команду и получить уникальные значения:
Код:
cat continents | sort | uniq
Результаты не должны удивлять, если вы когда-либо смотрели на глобус:
e8ra8lsu5jeyrov80hr6.jpg

Но я хочу посмотреть, сколько атак с каждого континента. Поэтому я призываю моего старого друга awk для этого:
Код:
awk -F '\n' '{print $0}' continents.txt | sort | uniq -c
1j63u04ex131x849x5jz.jpg

Довольно мило, правда? Поэтому я уберу первые пробелы, вставлю запятую после подсчета и добавлю ее в текстовый файл.
Код:
awk -F '\n' '{print $0}' continents.txt | sort | uniq -c | awk '{$1=$1};1' | sed -r 's/\s+/,/'  > contintent-totals.txt
4yc2g7i35kx9t9dnceiy.jpg

Теперь я могу добавить его в Google листы.
w18dwindj8mptfnra7j2.jpg

и получите этот чудесный график:
yi9twfbtsktgl2x9eddq.jpg

Это процесс, который я повторяю для других мест (страна, город, область), поэтому я не буду повторять его. Итак, вот мои результаты:

Страны
jnjtsnsn3tcf5rrzjqzk.jpg

Вот топ 10 стран, из которых происходят злоумышленники:
  • Китай (304)
  • Соединенные Штаты (138)
  • Франция (95)
  • Индия (46)
  • Сингапур (43)
  • Южная Корея (38)
  • Германия (37)
  • Россия (37)
  • Бразилия (35)
  • Великобритания (29)
Города
e1q8xz4zu1so9w50mff9.jpg

Атаки на город немного более агрегированы.
  • Пекин (57)
  • Шанхай (53)
  • Хэфэй (25)
  • Амстердам (21)
  • Бангалор (16)
  • Лондон (14)
  • Синьпу (14)
  • Клифтон (10)
  • Северный Берген (9)
Но все еще довольно интересно.

Структурные области
018bt087kui3oetwfr3e.jpg

Этот агрегируется еще больше. Вот топ 10 атакующих областей:
  • Пекин (145)
  • Шанхай (61)
  • Аньхой (26)
  • Англия (22)
  • Цзянсу (22)
  • Нью-Джерси (22)
  • Северная Голландия (22)
  • Калифорния (18)
  • Сан-Паулу (18)
  • Карнатака (16)
Вывод
Великие вещи всегда происходят из любопытства. Мне интересно, какие другие типы шаблонов и данных я могу извлечь из этого, поэтому я буду продолжать экспериментировать с ними.
Если вы решили, что хотите сделать тоже для своего веб-сайта, попробуйте выполнить следующие действия, и если вам нужна помощь с этим.

Источник:
 

f22

Codeby Academy
Gold Team
05.05.2019
1 940
228
BIT
1 770
cat /var/log/secure | grep "$i"
Эту строку можно заменить на
grep /var/log/secure ${i}

grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
Здесь можно вот так
grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}"

А сортировать и записывать проще вот так
sort -u -o "temp.txt"

sort | uniq > "badguyips.txt"
Тут можно также
sort -u -o "badguyips.txt"

Да, у меня здесь 1141 IP-адрес.
Это можно сразу отобразить в консоли
wc -l badguyips.txt
 
  • Нравится
Реакции: Polyglot и Zer0must2b
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!