Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Использование испытательного стенда на основе средств виртуализации для проверки эффективности средств обнаружения вторженийСтр 1 из 8Следующая ⇒
Структура испытательного стенда следующая [1].
Атака имитируется в клиент-серверном приложении, работающем по протоколу TCP IP (порт 3333), при передаче от клиента к серверу исполняемого файла hello_world.exe, который сохраняется и автоматически запускается на стороне сервера. Атака происходит из узла с установленной Ubuntu (атакующая сеть) в узел с установленной Windows XP (защищаемая сеть) через два маршрутизатора с FreeBSD, на одном из которых функционирует IDS Snort в режиме обнаружения вторжений. Приложение состоит из передатчика файла для Ubuntu (Sender) и приемника файла для Windows XP (Receiver.exe). Приемник при запуске переходит в режим ожидания подключения. Запуск передатчика: ./Sender <путь_к_файлу> [<IP_адрес_получателя>] При отсутствии второго аргумента командной строки используется адрес 127.0.0.1. Запуск Snort в режиме обнаружения вторжений: <действие> <протокол> <IP отправителя> <PORT отправителя> -> <IP получателя> <PORT получателя > (sid:<номер>; content:”<содержимое>”; msg:”<сообщение об атаке>”)
Результаты тестирования. Передается файл hello_world.exe с узла 192.168.2.5 на узел 192.168.0.5: ./Sender hello_world.exe 192.168.0.5 (рис.1).
Рис.1. функциональная часть приложения для тестирования. Запуск Snort в режиме обнаружения атак: snort -i em0 –l snort -c snort.conf Файл snort.conf: alert tcp any any -> 192.168.0.0/24 3333 (sid:1; content:”Hello World!”; msg:”Attack detected!”) (рис.2.) Рис.2. Настройки и запуск Snort. При передаче файла Snort на маршрутизаторе фиксирует факт атаки в файл snort/alert (рис.3):
Рис.3. Сообщение Snort об обнаруженной атаке. В режиме журналирования пакетов при передаче файла Snort сохраняет в папке snort лог-файл с содержимым пакетов (рис.4):
Рис.4. Данные лог-файла о содержимым файла с атакой. Исходные коды программ представлены на рис. 5.
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <stdio.h> #include <string.h>
#define BUFSIZE 1024
int sendall(int sock, char *buffer, int len);
int main(int argc, char *argv[]) { if(argc!=2 && argc!=3) { printf("Wrong number of arguments\n"); return 0; } char buffer[BUFSIZE]; FILE *fl; int sock, i=0; struct sockaddr_in addr; if(!(fl=fopen(argv[1], "rb"))) { printf("Error: open file\n"); return 0; } sock=socket(AF_INET, SOCK_STREAM, 0); if(sock<0) { printf("Error: create socket\n"); return 0; } addr.sin_family=AF_INET; addr.sin_port=htons(3333); if(argc==2) addr.sin_addr.s_addr=htonl(INADDR_LOOPBACK); else addr.sin_addr.s_addr=inet_addr(argv[2]); if(connect(sock, (struct sockaddr *)&addr, sizeof(addr))<0) { printf("Error: connection failed\n"); return 0; } while(1) { if(feof(fl)) { sendall(sock, buffer, i-1); break; } if(i>=BUFSIZE) { sendall(sock, buffer, i); i=0; } buffer[i++]=fgetc(fl); } close(sock); fclose(fl); }
int sendall(int sock, char *buffer, int len) { int total=0, n; while(total<len) { n=send(sock, buffer+total, len-total, 0); if(n==-1) break; total+=n; } return (n==-1? -1: total); }
Исходный код программы-приемника (сервер) для Windows: #include <winsock2.h> #include <stdio.h> #include <string.h>
#pragma comment(lib, "wsock32.lib")
#define BUFSIZE 1024
int main() { WSADATA wsadata; if(WSAStartup(0x101, &wsadata)) { printf("Error: init winsock\n"); return 0; } SOCKET sock_listen, sock_accept; struct sockaddr_in addr; char buffer[BUFSIZE]; int bytes_read, file_size, i; FILE *fl; sock_listen=socket(AF_INET, SOCK_STREAM, 0); if(sock_listen<0) { printf("Error: create socket\n"); return 0; } addr.sin_family=AF_INET; addr.sin_port=htons(3333); addr.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sock_listen, (struct sockaddr *)&addr, sizeof(addr))<0) { printf("Error: bind socket\n"); return 0; } listen(sock_listen, 1); sock_accept=accept(sock_listen, 0, 0); if(sock_accept<0) { printf("Error: acception\n"); return 0; } if(!(fl=fopen("recv.exe", "wb"))) { printf("Error: open file\n"); return 0; } while(1) { bytes_read=recv(sock_accept, buffer, BUFSIZE, 0); if(bytes_read<=0) break; for(i=0; i<bytes_read; i++) fputc(buffer[i], fl); } file_size=ftell(fl); fclose(fl); closesocket(sock_accept); closesocket(sock_listen); WSACleanup(); printf("File size: %d\n", file_size); system("recv.exe"); }
Рис.5.Исходный код программы-передатчика (клиент) для Ubuntu.
Краткие выводы.
Выполнена атака (тестирование Snort) с помощью передачи файла с вредоносной программой, которая была обнаружена. Данный механизм можно использовать для проверки функционирования других средств обнаружения вторжений.
Используемые источники
|