
봇넷 시뮬레이션 프레임워크
BSF는 P2P(peer-to-peer) 봇넷을 구현하고 확장하며 설정을 조정하고 방어자가 모니터링 및 대응 조치를 평가할 수 있도록 하는 개별 이산 시뮬레이션 환경을 제공합니다.
봇마스터와 방어자 간의 군비 경쟁에서 봇마스터는 우위를 점하고 있습니다. 방어자는 봇마스터가 도입하는 새로운 위협과 행동에 대응해야 하기 때문입니다. BSF(봇넷 시뮬레이션 프레임워크)는 경쟁 환경을 평준화하여 이 문제를 해결합니다. 방어자가 새로운 봇넷 모니터링 기술과 대응 조치를 개발하고 평가함으로써 군비 경쟁에서 앞서 나갈 수 있도록 합니다. 이는 실제 환경에서 실험할 경우 다른 연구자와 간섭을 일으키거나 봇마스터에게 탐지될 가능성이 있기 때문에 매우 중요합니다.
BSF는 P2P 봇넷을 현실적으로 시뮬레이션하여, 실제 환경에 배포되기 전에 모니터링 메커니즘과 공격 차단 시도(takedown)의 설계 및 영향을 탐구하고 연구할 수 있게 합니다. BSF는 이산 사건(discrete event) 기반의 봇넷 시뮬레이터로, 다음을 포함한 고도로 구성 가능하고 사용자 정의 가능한 다양한 봇넷 기능을 제공합니다:
또한 BSF는 대화형 시각화 모듈을 제공하여 시뮬레이션 결과를 더욱 자세히 연구할 수 있습니다. BSF는 연구자와 방어자가 모니터링 방지 메커니즘 [1,2,3]이 존재하는 상황에서 다양한 모니터링 메커니즘의 설계를 연구할 수 있도록 설계되었습니다. 또한 이 도구는 사용자가 지금까지 관찰된 봇넷의 설계 선택이 미치는 영향을 탐구하고 이해할 수 있게 합니다.
BSF는 시뮬레이션 프레임워크와 시각화 도구로 구성됩니다. 시뮬레이션 프레임워크 자체는 OMNeT++ 위에 구축됩니다. 시각화는 Dash를 기반으로 하여, 사용자가 선호하는 브라우저에서 대화형 환경을 제공합니다.
BSF의 현재 버전은 OMNeT++ 버전 5.4.1로 빌드 및 테스트되었습니다.
설치 지침, 튜토리얼 및 제공되는 기능에 대한 참고 자료는 OMNeT++ 문서를 참조하십시오.
봇넷 시뮬레이션을 시각화하려면 다음 파이썬 패키지가 필요합니다:
pip install dash==1.2.0 # The core dash backend
pip install dash-daq==0.1.0 # DAQ components (newly open-sourced!)
pip install networkx
pip install natsort
pip install numpy
OMNeT++ 시뮬레이션은 .ini 파일에 정의된 구성을 기반으로 실행됩니다. 이 저장소의 simulations 폴더에는 tests.ini 및 sample.ini 파일에 미리 정의된 여러 구성이 포함되어 있습니다.
구성을 실행하려면 OMNeT++ IDE 또는 명령줄을 사용할 수 있습니다. BSF는 OMNeT++의 그래픽 기능을 사용하지 않으므로, 콘솔 출력만 사용하는 cmdenv에서 모든 시뮬레이션을 실행하는 것을 권장합니다.
IDE 내에서 시뮬레이션을 실행하려면 실행 구성을 설정해야 합니다. 이를 위해 *.ini 파일을 마우스 오른쪽 버튼으로 클릭하고 Run As -> Run Configurations를 선택합니다. 그런 다음 아래 이미지와 같이 구성 파일을 설정합니다:

이제 Apply를 클릭한 후 Run을 실행합니다. 시뮬레이션 출력은 IDE 콘솔에 나타납니다.
명령줄에서 실행하려면 먼저 프로젝트를 빌드해야 합니다. 루트 폴더로 이동하여 다음을 실행합니다:
make MODE=release all
그런 다음 simulations 폴더로 이동하여 다음을 실행합니다:
../BSF -r 0 -m -u Cmdenv -c SampleConfig_Crawler -n .. samples.ini
IDE 또는 명령줄에서 시뮬레이션을 실행하든, 다음과 유사한 출력이 표시됩니다:
** Event #577792 t=64831.46985369179 Elapsed: 4.21157s (0m 04s) 37% completed (37% total)
Speed: ev/sec=180486 simsec/sec=14682 ev/simsec=12.293
Messages: created: 406512 present: 2108 in FES: 487
Just crawled: 24 nodes at 88983.25891616358
Just crawled: 40 nodes at 92583.25891616358
** Event #1050880 t=93607.74036896409 Elapsed: 6.28757s (0m 06s) 54% completed (54% total)
Speed: ev/sec=227885 simsec/sec=13861.4 ev/simsec=16.4402
Messages: created: 729732 present: 2106 in FES: 630
Just crawled: 108 nodes at 96183.25891616358
Just crawled: 286 nodes at 99783.25891616358
Just crawled: 570 nodes at 103383.25891616358
**로 시작하는 블록은 OMNeT++의 표준 출력으로, 시뮬레이션 진행 상황과 통계를 나타냅니다. 선택한 구성에서는 크롤러가 각 크롤링 간격마다 발견된 노드 수를 보고하는 추가 출력이 있습니다. 이 정보만으로는 많은 것을 알 수 없지만, 다음 섹션에서는 봇넷과 크롤러 결과의 출력을 시각화하는 방법을 보여드리겠습니다.
시각화는 시뮬레이션 프레임워크와 분리되어 있으며, 생성된 그래프 및 모니터링 로그 파일을 기반으로 작동합니다. 또한 메인 프레임워크를 실행하지 않고 시각화를 탐색할 수 있도록 샘플 데이터도 업로드했습니다.
시뮬레이션 결과를 시각화하려면 visualization 폴더로 이동하여 app.py를 호출합니다. 그런 다음 선호하는 브라우저를 열고 *http://127.0.0.1:8050/*에 접속합니다. 그러면 샘플 구성 중 하나의 그래프 보기가 표시되며, 다음과 유사한 모습입니다:

화면 오른쪽 상단의 드롭다운 메뉴를 통해 다양한 구성의 결과를 선택할 수 있습니다. 화면 하단에서는 봇넷의 사용 가능한 모든 스냅샷을 나타내는 타임라인을 볼 수 있습니다. 이를 통해 봇의 활동 및 연결 변화를 시각화할 수 있습니다. 또한 오른쪽 메뉴에서는 크롤러나 센서가 수집한 정보를 시각화할 수 있습니다. 다음 그림에서는 크롤러의 뷰가 녹색으로 강조 표시된 예를 볼 수 있습니다.

또한 현재 모니터링 및 차단 작업 분석을 지원하는 더 발전된 시각화 기능을 개발 중입니다.
다음 출판물은 BSF의 사용 사례 예시를 제시합니다:
[3] Emmanouil Vasilomanolakis, Max Mühlhäuser, Jan Helge Wolf, Leon Böck, Shankar Karuppayah