Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- git
- Github
- rnn
- KAKAO
- Resnet
- 국가과제
- GoogleDrive
- Spring
- LINUX MASTER
- ChatGPT
- ICT멘토링
- 인터넷의이해
- cloud
- Docker
- colab
- Web
- 크롤링 개발
- API
- suricata
- Database
- 고등학생 대상
- VSCode
- Spring Boot
- Rocky Linux
- 코딩도장
- C언어
- Machine Learning
- OSS
- Powershell
- Python
Archives
- Today
- Total
코딩두의 포트폴리오
Suricata 전체적인 개발 목표 본문
1. 프로젝트 초기 설정
1-1. 요구사항 정의
- 수리카타의 탐지 기능을 활용해 C로 만든 프로그램에서 수행해야 할 주요 기능
- 패킷 읽기: 네트워크 인터페이스에서 실시간 패킷 캡처
- 탐지 규칙 로드: 수리카타 규칙을 메모리에 로드
- 탐지 기능 수행: 패킷과 규칙을 비교해 탐지 여부 확인
- 결과 처리: 탐지된 결과를 로그로 저장하거나 알림 출력
- 데몬 동작: 프로그램이 백그라운드에서 실행
1-2. 개발 환경 구성
- 필요 도구:
- C 컴파일러: gcc 또는 clang
- 패킷 캡처 라이브러리: libpcap (패킷 읽기)
- 수리카타 라이브러리: Suricata와 연동하여 탐지 기능 수행
- 빌드 도구: make 또는 cmake
환경 구축
sudo yum install gcc make libpcap libpcap-devel suricata suricata-devel
2. 설계 단계
2-1. 프로그램 구조 설계
- 모듈화된 기능 설계:
- 패킷 캡처 모듈:
- 네트워크 인터페이스(예: enp4s0)에서 실시간 패킷 캡처
- libpcap 라이브러리 사용
- 탐지 규칙 관리 모듈:
- Suricata 규칙 파일 로드
- 메모리에 규칙을 올리고 관리
- 탐지 엔진 모듈:
- 수리카타 엔진을 호출하여 패킷과 규칙을 비교
- 로그 처리 모듈:
- 탐지된 결과를 로그 파일 또는 콘솔에 출력
- 선택적으로 DB 연동
- 데몬 모듈:
- 백그라운드 실행을 위한 데몬화
- 패킷 캡처 모듈:
구조도 초안
+--------------------------+
| Main Program |
| |
| +--------------------+ |
| | Packet Capture | |
| +--------------------+ |
| +--------------------+ |
| | Rule Management | |
| +--------------------+ |
| +--------------------+ |
| | Detection Engine | |
| +--------------------+ |
| +--------------------+ |
| | Logging/Alerting | |
| +--------------------+ |
+--------------------------+
3. 구현 단계
3-1. 패킷 캡처 기능 개발
- 목표: libpcap을 사용해 인터페이스에서 실시간으로 패킷을 캡처.
- 기능 구현:
- 네트워크 인터페이스에서 패킷을 읽고, 캡처된 데이터를 Suricata 모듈에 전달.
- 코드 예시:
#include <pcap.h>
void capture_packets(const char *interface) {
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *handle = pcap_open_live(interface, BUFSIZ, 1, 1000, errbuf);
if (handle == NULL) {
fprintf(stderr, "Couldn't open device %s: %s\n", interface, errbuf);
return;
}
struct pcap_pkthdr header;
const u_char *packet;
while ((packet = pcap_next(handle, &header)) != NULL) {
printf("Captured a packet with length of [%d]\n", header.len);
// 이후 Suricata 모듈에 패킷 전달
}
pcap_close(handle);
}
3-2. 탐지 규칙 로드 기능 개발
- 목표: Suricata의 탐지 규칙을 로드하고, 프로그램 내에서 적용.
- 기능 구현:
- 탐지 규칙 파일(.rules)을 읽고 메모리에 로드.
- Suricata와의 API를 활용하여 규칙을 로드 및 관리.
3-3. 탐지 엔진과 Suricata 연동
- 목표: Suricata 모듈에 패킷을 전달하고 탐지 결과를 반환받음.
- 방법:
- Suricata 설정 파일(suricata.yaml)과 규칙을 활용.
- 패킷을 탐지 엔진에 전달.
- Suricata의 API를 통해 결과를 수신.
- 코드 구조
void detect_packets(const u_char *packet, int length) { // Suricata 엔진에 패킷 전달 // 탐지 결과를 반환받아 처리 }
-
void detect_packets(const u_char *packet, int length) { // Suricata 엔진에 패킷 전달 // 탐지 결과를 반환받아 처리 }
3-4. 로그 및 알림 처리 기능
- 목표: 탐지 결과를 로그로 기록하거나 콘솔에 출력.
- 기능 구현:
- 탐지된 결과를 syslog 또는 파일 로그로 기록.
- 경고 발생 시 알림 출력.
3-5. 데몬화
- 목표: 프로그램이 백그라운드에서 동작하도록 설정.
- 구현 방법:
- 데몬화 작업(C 언어 POSIX 표준 사용).
- SIGTERM 및 SIGKILL 신호 처리.
4. 테스트 및 검증 단계
4-1. 성능 테스트
- 테스트 시나리오:
- 1 Gbps 및 10 Gbps 트래픽 환경에서 패킷 드롭률 측정.
- 탐지 속도 및 CPU 사용률 확인.
- 테스트 도구:
- Tcpreplay를 사용하여 트래픽 생성
sudo tcpreplay -i enp4s0 sample.pcap
5. 문서화 및 결과 분석
- 문서화 항목:
- 프로그램 구조 설계도.
- 주요 함수 및 모듈 설명.
- 테스트 결과 및 성능 분석.
- 결과 분석:
- 탐지 규칙 정확도: 오탐/미탐 비율.
- 성능 분석: CPU, 메모리 사용률 및 패킷 처리 속도.
'Suricata' 카테고리의 다른 글
[1~2주차] github 오픈소스의 이슈(성능/개선점) 자료조사 (Suricata) (1) | 2024.10.30 |
---|---|
[1~2주차] github 오픈소스 자료조사 (Suricata) (2) | 2024.10.29 |
Suricata 맛보기 (2) | 2024.10.09 |