
자동화된 Linux 침해 대응 스크립트로, 라이브 트라이어지, 메모리 수집(LiME), 디스크 이미징, YARA 스캐닝, HTML 보고서 생성을 포함합니다.
Linux 인시던트 응답 스크립트

TuxResponse는 bash로 작성된 Linux 시스템용 인시던트 응답 스크립트입니다. Linux 시스템에서 인시던트 응답 활동을 자동화하고 결과를 손상시키지 않으면서 신속하게 시스템을 분류(triage)할 수 있게 해줍니다. 일반적으로 기업 시스템은 일부 모니터링 및 제어 기능을 갖추고 있지만, 섀도우 IT 및 표준화되지 않은 이미지가 배포되는 예외가 있습니다. 시행착오를 겪으며 10개의 명령어를 입력해야 하는 작업이 버튼 하나로 수행될 수 있습니다.
테스트 환경:
주요 목적:
패키지에 포함된 외부 도구:
INSTALL LiME
function init_lime(){
if [ -f /usr/bin/yum ]; then
yum -y install make kernel-headers kernel-devel gcc
elif [ -f /usr/bin/apt-get ]; then
apt-add-repository universe
apt-get -y install make linux-headers-$(uname -r) gcc
fi
rm -f /tmp/v1.8.1.zip
wget -P/tmp https://github.com/504ensicsLabs/LiME/archive/v1.8.1.zip
unzip /tmp/v1.8.1.zip
rm -f /tmp/v1.8.1.zip
pushd LiME-1.8.1/src
make
mv lime-*.ko /tmp/lime.ko
popd
rm -rf LiME-1.8.1
}
인시던트 대응 시 LiME을 수동으로 모든 명령어를 입력하여 설치해야 한다면, 상당히 느려질 것입니다.
1) 시스템 정보, IP, 날짜, 시간, 로컬 시간대, 마지막 부팅 - 'hostnamectl; who -b; uname -a; uptime; ifconfig; date; last reboot'
1) 마운트된 파일 시스템 확인 - 'df -h'
2) 실행 파일 해시 (MD5) - 'find /usr/bin -type f -exec file "{}" \; | grep -i "elf" | cut -f1 -d: | xargs -I "{}" -n 1 md5sum {}'
3) 수정된 파일 - 'modified_files_period_select' (tuxresponse.sh 내 함수 호출)
4) 모든 숨겨진 디렉터리 나열 - 'find / -type d -name "\.*"'
5) 사용자/그룹 이름이 없는 파일/디렉터리 - 'find / \( -nouser -o -nogroup \) -exec ls -l {} \; 2>/dev/null'
6) 패키지에서 변경된 파일 - 'packaged_files_changed' (tuxresponse.sh 내 함수 호출)
1) 루트킷 확인 - 'chkrootkit' 실행
2) Yara 스캔 - tuxresponse.sh 함수 'yara_select' 호출 (마스터 리포지토리의 모든 YARA Linux 규칙으로 시스템 스캔)
3) EXIFTool - tuxresponse.sh 함수 'exiftool_select' 호출 (EXIFTool 설치)
1) 실행 중인 프로세스 나열 - 'ps -axu'
2) 삭제되었지만 실행 중인 바이너리 - 'ls -alR /proc/*/exe 2> /dev/null | grep deleted'
3) 활성 네트워크 연결 (TCP, UDP) - 'ss -tunap | sed "s/[ \t]\+/|/g"'
4) PID 기반 프로세스 덤프 - 'dump_process_select' (tuxresponse.sh 내 함수 호출)
1) 덤프할 PID 입력: **(실행되는 명령어 - gcore -a -o "${DUMP_FILE}" ${DUMP_PID} )**
5) /tmp, /dev에서 실행 중인 프로세스 - 'ls -alR /proc/*/cwd 2> /dev/null | grep -E "tmp|dev"'
1) 모든 활성 네트워크 연결/로우 소켓 나열 - 'netstat -nalp; netstat -plant'
1) 시스템에 연결된 모든 사용자 나열 - 'w'
2) 비밀번호가 있는 사용자 확인 - 'getent passwd'
1) Bash 히스토리 파일 확인 - 'cat ~/.bash_history | nl'
1) 모든 크론 작업 나열 - 'list_all_crontab' (tuxresponse.sh 내 함수 호출)
2) 모든 시작/부트 프로그램 나열 - 'list_all_onstartup' (tuxresponse.sh 내 함수 호출)
1) 사용자 .bash_history 덤프 - 'cat_all_bash_history' (tuxresponse.sh 내 함수 호출)
2) 바이너리가 포함된 로그 찾기 - 'grep [[:cntrl:]] /var/log/*.log'
이 옵션을 사용하면 원격 시스템에 연결하여 모든 스크립트와 도구를 복사하고 시스템을 분석할 수 있습니다.
이 옵션을 사용하면 LiME을 소스에서 컴파일하고 시스템의 RAM 메모리를 덤프할 수 있습니다. 다른 방법은 모든 주요 커널 버전에 대해 소스에서 컴파일하고 LKM을 삽입해야 하므로 가장 간단한 방법입니다.
이 옵션을 사용하면 잘 알려진 도구인 dd를 사용하여 대상 시스템의 전체 디스크 이미지를 생성할 수 있습니다. 함수는 소스와 대상을 매개변수로 받아 다음 명령어에 삽입합니다: 'dd if=${IMAGE_IN} | pv | dd of='${IMAGE_OUT}' bs=4K conv=noerror,sync'. 원격 시스템을 조사하는 경우 스크립트가 해당 시스템에 자신을 복사합니다. 그런 다음 ${TARGET_HOST} 매개변수가 설정된 경우, 스크립트는 다음 명령어를 사용하여 분석가 시스템에 이미지를 다운로드합니다: "ssh -p${TARGET_PORT} ${TARGET_USER}@${TARGET_HOST} 'dd if=${IMAGE_IN} bs=4K conv=noerror,sync' | pv | dd of='${IMAGE_OUT}'" (진행 상황을 추적하기 위해 pv를 적극적으로 사용합니다)
수행하는 모든 작업은 텍스트 파일에 기록되므로 쉽게 돌아가서 출력을 확인할 수 있습니다. 이 기능의 장점은 좋아하는 로그 분석 도구에 업로드하여 나중에 분석할 수 있다는 것입니다. 또한 이 기능을 사용하여 HTML 보고서를 생성하고 명령어로 생성된 출력을 사람이 더 읽기 쉬운 형태로 볼 수 있습니다.
스크립트가 올바르게 작동하는 데 필요한 바이너리를 설치합니다.
1) 종속성
2) Yara 및 규칙
3) ExifTool
4) 초기화 확인
5) chckrootkit
6) LiME
tuxresponse.sh에 강화 및 포렌식 건전성 개선 적용:
YYYYMMDDTHHMMSSZ)를 사용하여 방어 가능한 타임스탬프를 제공합니다.evidence/manifest.txt에 해시(SHA-256)되며, 디스크 이미지는 함께 .sha256 파일을 얻습니다.modified_files_period_select는 더 이상 대상 파일 시스템에 타임스탬프 파일을 touch하지 않습니다 (이전에는 find 실행 전에 /tmp의 atime/mtime을 오염시켰습니다). 이제 find / -xdev -newermt "1 $opt ago"를 사용합니다._create_disk_image에서 eval ${DD_CMD} 제거; dd/ssh 파이프라인이 직접 실행되며, 소스 장치는 사용 전에 ^/dev/[a-zA-Z0-9]+$에 대해 검증됩니다.참고: 메뉴 기반 모드는 여전히
.cmds.sh,.menu_en.sh,forensics.sh에 의존하며, 이 파일들은 이 리포지토리에 포함되어 있지 않습니다. 명령/메뉴 카탈로그 재구축은 별도 작업으로 추적됩니다.
dump_process_select는 PID가 숫자이고 /proc/<pid>가 존재하는지 확인한 후 gcore를 호출합니다.exec_CMD는 더 이상 eval을 사용하지 않습니다. 내부 카탈로그의 셸 파이프라인 명령어는 bash -c를 통해 전달됩니다.set -euo pipefail 하에 실행됩니다.DISTO → DISTRO 오타 수정 (이전에는 자동으로 배포판 이름을 잘못 지정).apt-get install netstat → net-tools.evidence/*.txt를 반복 처리하고 (더 이상 ls 파싱 안 함) manifest를 건너뜀; 출력 변수는 인용 처리됨.VERSION='1.1' 상수 추가; 배너에 버전 출력.shellcheck -S error 상태 양호.