-
[ubuntu] Unix 침해사고 분석-스케줄링(crontab)> Information Security/Linux 2017. 2. 11. 17:27
침해사고가 발생하면
분석 조사관은 crontab을 통해 서버의 스케줄링을 확인한다.
crontab은
Unix에서 사용되는 'cron'이라는 소프트웨어에서 규정해놓은 테이블 명칭이다.
주기적으로 (월/일/시/분/초 단위) 운영자가 설정해놓은 명령어를 실행시키는 스케줄러인 셈이다.
이 기능은 동일한 업무를 자동화하는 편리함을 갖춘 반면, 공격자에게도 좋은 도구가 된다.
예를 들면, 대량의 정보를 한꺼번에 수집하여 공격자에게 전송하면 관리자의 모니터링 대상이 될 수 있으므로 소량의 데이터를 주기적으로 공격자에게 전송하거나, 백도어 프로세스를 생성하는 등에 활용된다. 마치 주기적으로 실행되는 작업인 양, 관리자가 눈치채지 못하게 스케줄(crontab)에 등록하는 것이다.
테스트 환경 : Ubuntu 14.04.5 LTS
- 목 차 -
1. 현재 등록된 작업스케줄 확인하기
- crontab -l
2. 스케줄링을 직접 해보자
- crontab -e
3. 간단한 출력 테스트
- 1분마다 쉘 실행
- 백업파일 자동생성/업데이트
- 생성된 지 30일이 지난 로그파일 삭제
※ 침해사고가 발생했다면 어떻게 이용할것인가
1. 현재 등록된 작업스케줄 확인하기
# crontab -l
스케줄이 사전에 지정되지 않았다면, 'no crontab for root[계정명]' 이라는 메시지가 뜬다.
2. crontab 스케줄링을 직접 해보자
# crontab -u 계정명 -e
스케줄 등록 시, 기존 에디터 설정이 없었다면 위처럼 '에디터를 설정하라'는 메시지를 띄운다.
가장 쉬운 에디터로 추천된 '/bin/nano'을 선택하면 다음과 같은 default 페이지가 있다.
※주석(#) 설정된 메시지는 [Ctrl+K]를 통해 삭제하고 스케줄링 할 명령어를 작성하면 된다.
3. 간단한 출력 테스트
1) 1분 마다 쉘 실행
# crontab -e
[환경] 바탕화면에 생성한 쉘 스크립트 'cat_test2.sh'를 1분마다 실행
이 때 스케줄링은 * * * * * 명령어 순으로 작성하는데, 의미는 아래와 같다.
*(분, 0~59) *(시, 0~23) *(일, 1~31) *(월,1~12) *(요일,0(일)~6(토)) 명령어
매일 3시에 실행 : 0 3 * * * /home/sj/Desktop/cat_test2.sh
매주 수요일 3시 15분마다 실행 : 15 3 * * 4 /home/sj/Desktop/cat_test2.sh
매월 2일 3시 15분마다 실행 : 15 3 2 * * /home/sj/Desktop/cat_test2.sh
※ crontab이 제대로 작동했는지 실행로그 확인
# sudo tail -F /var/log/syslog
2) 백업파일 자동생성/업데이트
- 백업파일을 만드는 스크립트 작성
#! /bin/bash
TARGET_FlLE=backup-$(date +%Y-%m-%d-%H-%M-%S).tar // 'backup-연도-월-일-시-분-초.tar'라는 파일 생성
cd /home/sj/Desktop
tar -cvf $TARGET_FILE . // Desktop 이하 파일들 압축
mv $TARGET_FILE /home/sj/Desktop/backup // 압축된 파일을 바탕화면의 backup 폴더로 이동
[환경] 바탕화면 이하의 파일들을 해당 날짜를 이름으로 한 백업파일 생성하는 스크립트 'backup.sh'
- 스크립트 실행 테스트
# chmod a+x backup.sh
# ./backup.sh
- 매일 23:59:00에 백업파일 생성하도록 스케줄링
# crontab -e
> 59 23 * * * /home/sj/Desktop/backup.sh // 매일 23시 59분에 backup.sh 스크립트 실행
3) 생성된 지 30일이 지난 파일 삭제
- 30일이 지난 *파일을 삭제하는 스크립트 작성 (*예: 로그, 백업파일)# vim delete_log.sh
> #! ./bin/bash
find /var/log/ -mtime +30 -name .log.\* -exec rm{}\; // 삭제할 파일이 위치하는 경로에서 log확장자를 가진 파일을 삭제
- 작성된 스크립트 crontab에 등록
# crontab -e
> 0 1 * * * /home/sj/Desktop/delete_log.sh // 하루에 한번씩 delete_log.sh 스크립트 실행
침해사고가 발생했다면 어떻게 이용할 것인가
1. crontab을 수정한 이력이 있는지 로그확인
1) 가장 최근 수정 이력 확인
# cd /var/spool/cron/crontabs
# ls -al
crontab을 통해 스케줄을 등록/수정한 파일이 남아있다. ls -al로 확인했을 때 최종 수정자명이 나타난다.
예를 들어 root와 sj라는 실 사용 관리계정이 운영중인 시스템에서 제3의 계정이 cron을 수정했을 때, 공격자의 스케줄링 수정작업을 유추할 수 있다.
2) history 로그 확인
# history
최근에 실행되었던 command 명령어들이 기록된 history 로그를 살펴보며, crontab이 수정된 적이 있는지 확인한다.
2. 인지되지 않은 쉘 스크립트 존재하는지 확인
- 시스템 담당자와 인터뷰를 통해 서버의 용도와 목적에 따라 실행중인 스케줄 외에 인가되지 않은 쉘 스크립트가 crontab에 등록된 지 확인이 필요하다.
< 참고 >
crontab 세팅 중 에러 - askubuntu.com
위키백과 -cron
오늘날짜 백업파일을 만드는 스크립트-http://goproprada.tistory.com/212
728x90반응형'> Information Security > Linux' 카테고리의 다른 글
파일시스템 (0) 2014.01.02 [EXT] 디렉토리 엔트리 (0) 2013.10.15 [EXT] 리눅스 시스템 - 아이노드 (0) 2013.10.15 [Linux] EXT 파일시스템 구조 (0) 2013.10.15 입출력 방향 변경 (0) 2010.11.15