Анализ атак на мой сайт
Недавно я проводил аудит безопасности в своем блоге и решил немного углубиться в свои журналы безопасности. С небольшим количеством команд Linux, кунг-фу, немного Golang и листами Google, я смог получить довольно хорошее представление о том, откуда происходят атаки.
Для начала я использую CentOS для размещения своего сайта, поэтому я проверил / var / log / secure. В этом журнале хранятся журналы аутентификации на моем сервере.
Вот как выглядит файл журнала:
Получив 301,327 строк маловероятно, что я буду все аналировать вручную. Давайте немного автоматизируем это.
Получение IP-адреса злоумышленников
Я хотел извлечь IP-адрес злоумышленников из этого файла. Таким образом, я могу заблокировать их.
Я начал возиться с командами Linux, пока не придумал
То, что он делает, довольно просто, он будет искать эти строки:
Это строки, которые идентифицируют журналы неудачных атак. Если они введут неправильное имя пользователя или попробуют другую форму атаки, у него будет одна из этих строк.
Поэтому мы перебираем этот список и ищем эти строки, а затем извлекаем IP-адрес из строки, в которой эта строка существует.
Затем он записывает IP-адрес в файл temp.txt . Это будет сделано для всех сообщений, которые у меня есть в моем списке «плохих строк».
В этом текстовом файле было множество дубликатов, поэтому я удалил дубликаты и поместил в файл только уникальные IP-адреса:
Круто, теперь у меня есть список IP-адресов, готовых к работе.
Да, у меня здесь 1141 IP-адрес.
Блокировка их
Теперь я хочу заблокировать эти IP-адреса. Так как я использую iptables, я могу просто удалить их с помощью этого простого скрипта:
Здорово. Теперь злоумышленники заблокированы на моем сервере.
Тогда мне стало любопытно. Откуда эти атаки?
Получение данных о местоположении
Поскольку у меня есть список IP-адресов, я решил запустить их для базы данных, такой как
Я написал эту программу Golang под названием «найди плохих парней», которая будет просматривать текстовый файл IP-адресов, искать информацию об их местонахождении, а затем записывать в серию текстовых файлов.
Я выписал места на основе:
Континенты
Итак, теперь я хочу взглянуть на continents.txt.
Ну, это будет проблемой, есть некоторые дубликаты.
Я могу выполнить быструю команду и получить уникальные значения:
Результаты не должны удивлять, если вы когда-либо смотрели на глобус:
Но я хочу посмотреть, сколько атак с каждого континента. Поэтому я призываю моего старого друга awk для этого:
Довольно мило, правда? Поэтому я уберу первые пробелы, вставлю запятую после подсчета и добавлю ее в текстовый файл.
Теперь я могу добавить его в Google листы.
и получите этот чудесный график:
Это процесс, который я повторяю для других мест (страна, город, область), поэтому я не буду повторять его. Итак, вот мои результаты:
Страны
Вот топ 10 стран, из которых происходят злоумышленники:
Атаки на город немного более агрегированы.
Структурные области
Этот агрегируется еще больше. Вот топ 10 атакующих областей:
Великие вещи всегда происходят из любопытства. Мне интересно, какие другие типы шаблонов и данных я могу извлечь из этого, поэтому я буду продолжать экспериментировать с ними.
Если вы решили, что хотите сделать тоже для своего веб-сайта, попробуйте выполнить следующие действия, и
Источник:
Недавно я проводил аудит безопасности в своем блоге и решил немного углубиться в свои журналы безопасности. С небольшим количеством команд 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-адреса:
Код:
# 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"
Ссылка скрыта от гостей
Да, у меня здесь 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-адресов, искать информацию об их местонахождении, а затем записывать в серию текстовых файлов.
Я выписал места на основе:
- континент
- страны
- Города
- Районы городов
Континенты
Итак, теперь я хочу взглянуть на continents.txt.
Ссылка скрыта от гостей
Ну, это будет проблемой, есть некоторые дубликаты.
Я могу выполнить быструю команду и получить уникальные значения:
Код:
cat continents | sort | uniq
Но я хочу посмотреть, сколько атак с каждого континента. Поэтому я призываю моего старого друга awk для этого:
Код:
awk -F '\n' '{print $0}' continents.txt | sort | uniq -c
Довольно мило, правда? Поэтому я уберу первые пробелы, вставлю запятую после подсчета и добавлю ее в текстовый файл.
Код:
awk -F '\n' '{print $0}' continents.txt | sort | uniq -c | awk '{$1=$1};1' | sed -r 's/\s+/,/' > contintent-totals.txt
Теперь я могу добавить его в Google листы.
и получите этот чудесный график:
Это процесс, который я повторяю для других мест (страна, город, область), поэтому я не буду повторять его. Итак, вот мои результаты:
Страны
Вот топ 10 стран, из которых происходят злоумышленники:
- Китай (304)
- Соединенные Штаты (138)
- Франция (95)
- Индия (46)
- Сингапур (43)
- Южная Корея (38)
- Германия (37)
- Россия (37)
- Бразилия (35)
- Великобритания (29)
Атаки на город немного более агрегированы.
- Пекин (57)
- Шанхай (53)
- Хэфэй (25)
- Амстердам (21)
- Бангалор (16)
- Лондон (14)
- Синьпу (14)
- Клифтон (10)
- Северный Берген (9)
Структурные области
Этот агрегируется еще больше. Вот топ 10 атакующих областей:
- Пекин (145)
- Шанхай (61)
- Аньхой (26)
- Англия (22)
- Цзянсу (22)
- Нью-Джерси (22)
- Северная Голландия (22)
- Калифорния (18)
- Сан-Паулу (18)
- Карнатака (16)
Великие вещи всегда происходят из любопытства. Мне интересно, какие другие типы шаблонов и данных я могу извлечь из этого, поэтому я буду продолжать экспериментировать с ними.
Если вы решили, что хотите сделать тоже для своего веб-сайта, попробуйте выполнить следующие действия, и
Ссылка скрыта от гостей
если вам нужна помощь с этим.Источник:
Ссылка скрыта от гостей