
dawg the hallway monitor - 운영 체제 변경 사항을 모니터링하고 소프트웨어 설치 시 도입되는 공격 표면을 분석합니다.
요약
이 도구의 이름은 사우스파크의 에피소드 (시즌 10, 에피소드 10)에 기반을 두고 있으며, 여기서 카트맨이 학교 복도를 순찰하는 복도 감독관 Dawg가 됩니다. 이 도구는 이전에 실행된 이후 Linux 기반 시스템에서 발생한 변경 사항을 모니터링하는 데 도움을 줍니다.
사용 방법 중 하나는 포함된 샘플 cronjob과 같은 것을 사용하여 정기적으로 dawgmon을 실행하고 결과를 시스템 관리자에게 이메일로 보내는 것입니다. 이는 악의적인 일이 발생하는 머신을 식별하고 누가 어디에 무엇을 설치하는지 모니터링하는 데 도움이 될 수 있습니다. 심각한 커널 백도어는 이 도구로부터 쉽게 숨을 수 있으므로, 이 도구는 단지 추가 도구일 뿐이며 Linux 머신의 완전한 보안 모니터링을 위해 의존해서는 안 된다는 점에 유의하십시오. 이는 단지 도구 상자에 있는 하나의 추가 옵션일 뿐입니다.
또 다른 유용한 방법은 소프트웨어를 설치하기 전에 기준선(baseline)을 생성하는 것입니다. 그런 다음 이 소프트웨어를 설치한 후 도구를 다시 실행하면 시스템에서 어떤 변경 사항이 발생했는지 쉽게 확인할 수 있습니다. 기준선을 설정한 후 머신에 virtualbox를 설치한 예는 다음과 같습니다:
1 change detected (0 warnings)
[...]
33 changes detected (0 warnings)
위 내용은 virtualbox에 대한 철저한 보안 검토를 수행하는 데 도움이 됩니다. 설치된 suid 바이너리는 명백한 침입 지점이며 실행 중인 서비스는 흥미롭습니다.
TCP 포트 열림 및 닫힘을 올바르게 감지하는 또 다른 예제 실행:
0 changes detected (0 warnings)
[1] 12489
1 change detected (0 warnings)
nc -l -p 4455 ^C
1 change detected (0 warnings)
이 도구는 완전한 정확성을 목표로 하지 않습니다. 일반적으로 ls와 같은 GNU core-utils의 출력을 도구 입력으로 신뢰하지 말라는 매우 중요한 권장 사항이 있습니다. 즉, 이러한 유형의 출력을 구문 분석하고 의존하는 도구를 거의 구축해서는 안 됩니다. 왜냐하면 그 출력은 항상 변경될 수 있기 때문입니다. 현실적으로 이러한 도구들의 출력은 많은 사람들과 자동 도구들이 이미 다양한 목적으로 그 출력에 의존하고 있기 때문에 비교적 안정적입니다.
그러나 dawgmon의 절충점은 다음과 같습니다. 파일 시스템 모니터링을 자체적으로 구현하기 위해 많은 로직을 구현하고, 블록 장치, 네트워크 인터페이스 등을 파싱하고 모니터링하기 위한 라이브러리를 포함하는 복잡한 바이너리를 구축해야 합니다. 이는 또한 도구를 훨씬 더 복잡하고 유지보수하기 어렵게 만듭니다. 현재 프로젝트에서는 주요 dawgmon 도구가 이미 캐싱, 명령 실행 및 명령 구현과 비교할 때 이전 및 현재 출력을 제공하는 작업을 처리하므로 변경 감지를 포함한 새 명령을 매우 짧은 시간에 추가할 수 있습니다. 이는 시간 제약이 있는 프로젝트에서 새 명령을 매우 빠르게 추가하고 해당 새 명령을 포함한 분석을 실행할 수 있음을 의미합니다.
명령은 간단히 Command 클래스에서 상속받아 추가할 수 있습니다. 이 클래스는 commands/init.py에 정의되어 있습니다. 이 파일에는 또한 명령의 마스터 목록(전체 분석 시 실행 순서)이 포함되어 있습니다. 그런 다음 'name', 'shell', 'command' 및 'desc'와 같은 속성을 설정하고 'parse()' 및 'compare()' 두 메서드를 구현해야 합니다. 구현 및 추가 방법에 대한 좋은 아이디어를 얻을 수 있도록 충분한 명령이 포함되어 있습니다.
사용법
최상의 결과를 얻으려면 루트로 도구를 실행하십시오. 도움말을 보려면 -h/--help를 입력하고 버전 정보를 보려면 -v/--version을 입력하십시오.
항상 기본 액션을 지정해야 합니다. 액션은 다음과 같습니다: -A: 시스템 분석 -C: 캐시 항목 비교 -E: 사용 가능한 명령 나열 -L: 캐시 항목 나열
dawgmon -A
dawgmon -A -e list_suids -e list_tcpudp_ports
dawgmon -E
dawgmon -L
dawgmon -C 3 5
분석에 도움이 되는 추가 옵션은 다음과 같습니다:
-d: 디버그 출력 표시 -e: 특정 명령 실행 (여러 번 사용 가능) -f: 루트로 실행에 대한 경고 없이 강제 실행 -g: 출력 색상화 -l: 사용할 데이터베이스 캐시 위치 -m: 캐시에 허용할 최대 캐시 항목 수 (캐시에 이보다 많은 항목이 있으면 데이터베이스가 잘림) -t: 감지된 각 이상에 대한 타임스탬프 정보를 출력하지 않음.
자세한 사용 정보는 -h와 함께 도구를 실행하십시오.
제한 사항
이 도구는 명령줄 도구의 출력을 구문 분석하며 그 중 일부는 GNU core-utils 특정 옵션에 의존합니다. 이 도구와 명령 구현을 BSD와 같은 다른 운영 체제로 신속하게 포팅할 수 없는 특별한 이유는 없지만, 현재 운영 체제 감지가 이루어지지 않고 있으며 운영 체제 지원에 따른 명령 분류도 수행되지 않고 있습니다. 먼저 구현되어야 합니다.
파이프, UNIX 소켓, /boot, /etc 등의 파일을 찾는 것과 관련하여, 'find'에 전달된 -xdev의 사용은 시작 디렉터리 아래에 마운트된 모든 파일 시스템이 탐색되지 않음을 의미합니다. 예를 들어 /boot는 적절히 스캔되지만 /boot/efi는 스캔되지 않을 수 있습니다. 향후에는 더 스마트한 접근 방식이 사용되어야 합니다.
현재 분석 시 타임스탬프가 다소 혼란스러울 수 있습니다. 기본적으로 경고, 정상 또는 디버그 이상 메시지의 타임스탬프는 생성 시간의 타임스탬프입니다(commands/init.py에서 확인 가능). 이상 메시지는 전체 명령줄 스캔이 완료된 후에 생성됩니다. 따라서 이 탐지가 작동하는 출력은 더 일찍 생성되었으며, 개별 이상에 대한 타임스탬프는 스캔 시간 이후의 시간을 표시합니다. 캐시 항목을 비교할 때는 스캔의 타임스탬프를 사용하여 탐지가 발생한 시간을 출력하는 것이 논리적으로 더 타당합니다.
정보
모든 권리 보유. Copyright (C) 2017-2019 Anvil Ventures Inc. 라이선스 정보는 LICENSE를 참조하십시오. 자세한 정보는 Vincent Berg [email protected]에게 문의하십시오.
업데이트된 소스 코드를 찾거나 패치를 기여하려면 다음 URL을 방문하십시오: https://github.com/anvilventures/dawgmon/