Kali 자동화: Bash 및 Python 활용

Kali LinuxBeginner
지금 연습하기

소개

본 실습에서는 Bash 및 Python 스크립트를 사용하여 Kali Linux 에서 작업을 자동화하는 방법을 배웁니다. 초점은 Nmap 을 사용한 네트워크 스캔 및 로그 구문 분석과 같은 반복적인 보안 감사 작업을 간소화하는 것입니다. 스크립트를 생성하고, 권한을 설정하고, Cron 작업을 통해 자동화된 작업을 예약하고, 실행을 테스트하게 됩니다. 이 실습은 Kali Linux 컨테이너 내에서 기본 자동화 기술을 구축하기 위한 상세한 단계별 지침을 제공합니다. 터미널을 열면 자동으로 Kali Linux 컨테이너 셸에 연결되어 바로 시작할 준비가 됩니다.

환경 설정 및 도구 설치

첫 번째 단계에서는 필요한 도구를 설치하여 Kali Linux 컨테이너 내에서 작업 환경을 준비합니다. 이는 앞으로 수행할 자동화 작업에 필요한 모든 소프트웨어를 갖추도록 보장하는 기초 단계입니다.

터미널을 열면 자동으로 Kali Linux 컨테이너 셸에 연결됩니다. 즉시 작업을 시작할 수 있습니다.

먼저, 소프트웨어의 최신 버전을 가져올 수 있도록 패키지 목록을 업데이트합니다.

apt update

다음으로, 네트워크 스캔을 위한 nmap과 스크립팅을 위한 python3를 설치합니다. 이 도구들은 본 실습의 작업에 매우 중요합니다.

apt install -y nmap python3 nano

설치에는 몇 분 정도 걸릴 수 있습니다. 완료되면 nmap 버전을 확인하여 설치되었는지 확인합니다.

nmap --version

출력 결과는 다음과 유사해야 하며, nmap을 사용할 준비가 되었음을 확인합니다.

Nmap version 7.x ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.4.6 openssl-3.0.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available NSE scripts: 655

다음으로 python3 설치를 확인합니다.

python3 --version

출력 결과는 다음과 유사하게 설치된 Python 버전을 보여줍니다.

Python 3.x.x

이러한 도구들을 설치함으로써, 다음 단계의 자동화 작업을 수행할 준비가 Kali Linux 환경에 완료되었습니다.

Nmap 스캔을 위한 Bash 스크립트 생성

환경 설정이 완료되었으므로 이제 Nmap 스캔을 자동화하는 Bash 스크립트를 작성합니다. Bash 스크립팅은 Linux 에서 명령줄 작업을 자동화하는 강력한 방법입니다. 이 단계에서는 localhost에서 Nmap 스캔을 실행하는 간단한 스크립트를 작성합니다.

먼저, nano 텍스트 편집기를 사용하여 /root 디렉터리에 nmap_scan.sh라는 새 파일을 만듭니다.

nano /root/nmap_scan.sh

이 명령은 nano 편집기에서 빈 파일을 엽니다. 편집기에 다음 내용을 입력하거나 붙여넣습니다.

#!/bin/bash
echo "Starting Nmap scan on localhost..."
nmap localhost
echo "Scan completed."

이 스크립트는 세 가지 주요 부분으로 구성됩니다.

  • #!/bin/bash: 셔뱅 (shebang) 이라고 하는 이 줄은 스크립트가 Bash 인터프리터로 실행되어야 함을 지정합니다.
  • echo "...": 이 명령어들은 터미널에 상태 메시지를 출력합니다.
  • nmap localhost: 이 명령어는 로컬 머신에서 기본 Nmap 스캔을 실행하며, 이는 연습을 위한 안전한 대상입니다.

nano에서 파일을 저장하려면 Ctrl+O를 누른 다음 파일 이름을 확인하기 위해 Enter를 누릅니다. 편집기를 종료하려면 Ctrl+X를 누릅니다.

터미널로 돌아온 후, /root 디렉터리의 내용을 나열하여 파일이 성공적으로 생성되었는지 확인합니다.

ls -l /root

출력에서 새 스크립트를 다음과 유사하게 볼 수 있습니다.

-rw-r--r-- 1 root root 85 Oct 20 10:15 nmap_scan.sh

이는 nmap_scan.sh 파일이 존재함을 확인합니다. 다음 단계에서는 이 스크립트를 실행 가능하게 만들고 테스트할 것입니다.

로그 구문 분석을 위한 Python 스크립트 생성

다음으로, 로그 구문 분석을 자동화하는 Python 스크립트를 작성합니다. 로그 구문 분석은 보안 분석에서 일반적인 작업으로, 로그 파일에서 특정 정보를 추출합니다. Python 은 강력한 텍스트 처리 기능 덕분에 이 작업에 매우 적합합니다.

먼저, 스크립트가 구문 분석할 샘플 로그 파일을 만듭니다. 다음 명령을 실행하여 /root 디렉터리에 sample.log라는 이름의 파일을 만들고 몇 가지 예제 로그 항목을 추가합니다.

echo -e "2023-10-20 10:00:00 INFO System started\n2023-10-20 10:01:00 ERROR Connection failed\n2023-10-20 10:02:00 INFO User logged in" > /root/sample.log

이제 Python 스크립트를 만듭니다. nano를 사용하여 log_parser.py라는 새 파일을 만듭니다.

nano /root/log_parser.py

nano 편집기에서 다음 Python 코드를 입력하거나 붙여넣습니다.

#!/usr/bin/env python3
print("Starting log parsing...")
with open('/root/sample.log', 'r') as file:
    for line in file:
        if 'ERROR' in line:
            print(line.strip())
print("Log parsing completed.")

이 스크립트는 /root/sample.log를 열고, 줄 단위로 읽고, ERROR라는 단어가 포함된 줄만 출력합니다. strip() 메서드는 줄에서 선행 또는 후행 공백을 제거합니다.

Ctrl+OEnter를 눌러 파일을 저장하고, Ctrl+X를 눌러 nano를 종료합니다.

/root 디렉터리에 로그 파일과 Python 스크립트가 모두 존재하는지 확인합니다.

ls -l /root

출력 결과에는 이제 두 파일이 모두 나열되어야 합니다.

-rw-r--r-- 1 root root 150 Oct 20 10:22 log_parser.py
-rw-r--r-- 1 root root  85 Oct 20 10:15 nmap_scan.sh
-rw-r--r-- 1 root root 112 Oct 20 10:20 sample.log

로그 구문 분석을 위한 Python 스크립트를 성공적으로 생성했습니다. 다음 단계는 두 스크립트에 올바른 권한을 설정하는 것입니다.

권한 설정 및 스크립트 테스트

두 스크립트가 모두 생성되었으므로 다음 단계는 실행 권한을 부여하고 테스트하는 것입니다. Linux 에서는 스크립트를 터미널에서 직접 실행하려면 실행 권한이 필요합니다.

먼저, 파일의 현재 권한을 확인합니다.

ls -l /root

출력의 첫 번째 열에 권한이 표시됩니다. -rw-r--r--는 파일이 읽고 쓸 수는 있지만 실행할 수는 없음을 나타냅니다.

-rw-r--r-- 1 root root 150 Oct 20 10:22 log_parser.py
-rw-r--r-- 1 root root  85 Oct 20 10:15 nmap_scan.sh
-rw-r--r-- 1 root root 112 Oct 20 10:20 sample.log

chmod 명령과 +x 플래그를 사용하여 두 스크립트에 실행 권한을 추가합니다.

chmod +x /root/nmap_scan.sh
chmod +x /root/log_parser.py

이제 권한을 다시 확인합니다.

ls -l /root

권한 문자열 (-rwxr-xr-x) 의 x는 파일이 이제 실행 가능함을 확인합니다.

-rwxr-xr-x 1 root root 150 Oct 20 10:22 log_parser.py
-rwxr-xr-x 1 root root  85 Oct 20 10:15 nmap_scan.sh
-rw-r--r-- 1 root root 112 Oct 20 10:20 sample.log

권한 설정이 완료되었으므로 Bash 스크립트를 실행하여 테스트합니다.

/root/nmap_scan.sh

스크립트가 Nmap 스캔을 실행하고 다음과 유사한 결과를 출력할 것입니다.

Starting Nmap scan on localhost...
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-20 10:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up, received user-set (0.00010s latency).
Other addresses for localhost (not scanned): ::1
rDNS record for 127.0.0.1: localhost
Not shown: 999 closed tcp ports (conn-refused)
PORT   STATE SERVICE
...
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
Scan completed.

다음으로 Python 스크립트를 테스트합니다.

/root/log_parser.py

스크립트가 로그 파일을 구문 분석하고 "ERROR"가 포함된 줄만 출력합니다.

Starting log parsing...
2023-10-20 10:01:00 ERROR Connection failed
Log parsing completed.

두 스크립트 모두 이제 올바르게 작동합니다. 마지막 단계는 이를 자동으로 실행되도록 예약하는 것입니다.

Cron 작업을 통한 스크립트 예약

마지막 단계에서는 Cron 을 사용하여 스크립트 실행을 자동화합니다. Cron 은 Linux 의 시간 기반 작업 스케줄러로, 지정된 간격으로 명령이나 스크립트를 실행할 수 있게 해줍니다.

작업을 예약하려면 crontab 파일을 편집해야 합니다. 다음 명령을 실행하여 crontab 편집기를 엽니다.

crontab -e

편집기 선택을 요청받으면 해당 번호를 입력하고 Enter를 눌러 nano를 선택합니다.

파일 하단으로 스크롤하여 다음 줄을 추가합니다. 이 줄들은 두 스크립트가 매분 실행되도록 예약합니다.

* * * * * /root/nmap_scan.sh >> /root/nmap_scan.log 2>&1
* * * * * /root/log_parser.py >> /root/log_parser.log 2>&1

이 구성을 분석해 보겠습니다.

  • * * * * *: 이것이 스케줄입니다. 다섯 개의 별표는 분, 시, 일, 월, 요일을 나타냅니다. 모든 별표는 해당 작업이 매일 매시 매분 실행됨을 의미합니다.
  • /root/nmap_scan.sh: 실행될 명령어입니다.
  • >> /root/nmap_scan.log: 스크립트의 표준 출력을 리디렉션하여 로그 파일에 추가합니다.
  • 2>&1: 표준 오류 스트림을 표준 출력으로 리디렉션하여 오류 메시지도 로그 파일에 캡처되도록 합니다.

nano에서 변경 사항을 Ctrl+OEnter로 저장하고, Ctrl+X로 종료합니다. 확인 메시지가 표시되어야 합니다.

crontab: installing new crontab

예약된 작업을 확인하려면 현재 crontab 항목을 나열합니다.

crontab -l

출력 결과는 방금 추가한 줄을 표시해야 합니다.

* * * * * /root/nmap_scan.sh >> /root/nmap_scan.log 2>&1
* * * * * /root/log_parser.py >> /root/log_parser.log 2>&1

Cron 작업 설정이 완료되었습니다. 1 분 후 로그 파일을 확인하여 예약된 스크립트 실행 결과를 볼 수 있습니다.

cat /root/nmap_scan.log
cat /root/log_parser.log

이를 통해 스크립트가 예약된 대로 자동으로 실행되고 있음을 확인할 수 있습니다.

요약

본 실습에서는 Bash 와 Python 을 사용하여 Kali Linux 에서 자동화의 기본 사항을 배웠습니다. 환경을 준비하고 Nmap 및 Python 과 같은 필수 도구를 설치하는 것부터 시작했습니다. 그런 다음 네트워크 스캔을 자동화하기 위한 Bash 스크립트와 로그 구문 분석을 위한 Python 스크립트를 생성했습니다. 또한 실행 권한을 설정하고, 스크립트를 테스트하고, Cron 작업을 사용하여 자동으로 실행되도록 예약하는 방법을 배웠습니다. 이러한 기술은 사이버 보안 및 시스템 관리에서 반복적인 작업을 자동화하기 위한 견고한 기반을 제공합니다.