본문 바로가기

외부 IP주소 평판검사 정보조회 수집 및 불량/악성 대응 활용 (TI 연계)

IP Reputation System

IP 평판 정보를 Redis와 같은 NoSQL 데이터베이스에 저장하여 TTL(대략 1주일) 동안 유지하면서, 이를 활용하는 방법입니다. 이를 통해 악의적인 IP 주소를 식별하고 차단하거나 보안 이벤트를 모니터링하는 데 활용할 수 있습니다.

주요 API 소개 및 활용

1. AbuseIPDB

  • 기능: IP 평판 점수, 악용 기록, 신고 기능
  • 활용 사례: 신고된 악성 IP 주소를 확인하고 블랙리스트에 추가

2. IPQualityScore

  • 기능: IP 평판 점수, 프록시/VPN 탐지, 피싱/스팸 탐지
  • 활용 사례: 의심스러운 IP를 탐지하고 사용자 세션을 모니터링

3. VirusTotal

  • 기능: 멀웨어, 피싱 URL 검사, IP 평판 정보
  • 활용 사례: 멀웨어와 피싱 URL을 사전에 탐지하고 차단

4. Talos Intelligence

  • 기능: IP 평판 점수, 도메인 및 이메일 평판
  • 활용 사례: 도메인 평판 정보와 함께 IP 평판 정보를 종합하여 보안 정책 수립

5. Scamalytics

  • 기능: IP 평판 점수, 스캠 탐지
  • 활용 사례: 스캠 활동이 의심되는 IP를 모니터링하고 차단

6. MaxMind

  • 기능: 지리적 위치 정보, VPN/프록시 탐지
  • 활용 사례: 사용자의 지리적 위치를 기반으로 접근 제어

7. URLscan.io

  • 기능: URL 스캔, 악성 사이트 탐지
  • 활용 사례: URL 스캔을 통해 피싱 사이트와 악성 URL을 탐지

8. IPinfo.io

  • 기능: 지리적 위치 정보, ISP 정보, IP 평판
  • 활용 사례: IP 주소의 지리적 위치 및 ISP 정보를 통해 의심스러운 활동 탐지

구현 방법

  1. API 키 확보: 위의 서비스들에 가입하고 API 키를 발급받습니다.
  2. Redis 설치 및 설정
    sudo apt-get update
    sudo apt-get install redis-server
    sudo systemctl enable redis-server
    sudo systemctl start redis-server
  3. Python 코드 예제
    import redis
    import requests
    import json
    import time
    
    # Redis 설정
    redis_client = redis.Redis(host='localhost', port=6379, db=0)
    
    # API 키 설정
    API_KEYS = {
        'abuseipdb': 'YOUR_ABUSEIPDB_API_KEY',
        'ipqualityscore': 'YOUR_IPQUALITYSCORE_API_KEY',
        'virustotal': 'YOUR_VIRUSTOTAL_API_KEY',
        'scamalytics': 'YOUR_SCAMALYTICS_API_KEY',
        'urlscan': 'YOUR_URLSCAN_API_KEY',
        'ipinfo': 'YOUR_IPINFO_API_KEY'
    }
    
    # HTTP 요청 처리 함수 (에러 처리 포함)
    def make_request(url, headers=None):
        try:
            response = requests.get(url, headers=headers)
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            print(f"HTTP 요청 에러: {e}")
            return None
    
    # IP 평판 정보 조회 함수
    def get_ip_reputation(ip):
        reputation_data = {}
    
        # AbuseIPDB 조회
        abuseipdb_url = f'https://api.abuseipdb.com/api/v2/check?ipAddress={ip}&maxAgeInDays=90'
        abuseipdb_headers = {'Key': API_KEYS['abuseipdb'], 'Accept': 'application/json'}
        reputation_data['abuseipdb'] = make_request(abuseipdb_url, abuseipdb_headers)
    
        # IPQualityScore 조회
        ipqualityscore_url = f'https://ipqualityscore.com/api/json/ip/{API_KEYS["ipqualityscore"]}/{ip}'
        reputation_data['ipqualityscore'] = make_request(ipqualityscore_url)
    
        # VirusTotal 조회
        virustotal_url = f'https://www.virustotal.com/api/v3/ip_addresses/{ip}'
        virustotal_headers = {'x-apikey': API_KEYS['virustotal']}
        reputation_data['virustotal'] = make_request(virustotal_url, virustotal_headers)
    
        # Scamalytics 조회
        scamalytics_url = f'https://scamalytics.com/ip/{ip}/json'
        reputation_data['scamalytics'] = make_request(scamalytics_url)
    
        # URLscan.io 조회
        urlscan_url = f'https://urlscan.io/api/v1/search/?q=ip:{ip}'
        reputation_data['urlscan'] = make_request(urlscan_url)
    
        # IPinfo.io 조회
        ipinfo_url = f'https://ipinfo.io/{ip}/json?token={API_KEYS["ipinfo"]}'
        reputation_data['ipinfo'] = make_request(ipinfo_url)
    
        return reputation_data
    
    # Redis에 데이터 저장 함수
    def save_to_redis(ip, data, ttl=7*24*60*60):
        try:
            redis_client.setex(ip, ttl, json.dumps(data))
            print(f'IP 평판 정보 저장 완료: {ip}')
        except redis.exceptions.RedisError as e:
            print(f"Redis 저장 에러: {e}")
    
    # IP 주소 예제
    if __name__ == '__main__':
        ip_address = '8.8.8.8'
        
        # IP 평판 정보 가져오기
        reputation_data = get_ip_reputation(ip_address)
        
        # Redis에 저장 (TTL: 1주일)
        if reputation_data:
            save_to_redis(ip_address, reputation_data)

부연설명

  1. API 키 설정: 각 서비스의 API 키를 환경 변수 또는 별도의 설정 파일에 저장합니다.
  2. IP 평판 정보 조회: get_ip_reputation 함수는 각 API를 호출하여 IP 평판 정보를 수집합니다.
  3. Redis에 저장: setex 함수를 사용하여 TTL(1주일)을 설정하여 Redis에 평판 정보를 저장합니다.
  4. 결과 확인: print 문을 통해 IP 평판 정보가 제대로 저장되었는지 확인합니다.

이러한 방식으로 여러 API의 평판 정보를 수집하여 Redis에 저장하고, TTL을 설정하여 일정 기간 동안만 유지함으로써 효율적으로 관리할 수 있습니다. 이를 통해 보안 이벤트를 모니터링하고 의심스러운 IP를 빠르게 차단하는 데 활용할 수 있습니다.

SpiderFoot는 오픈 소스 인텔리전스(OSINT)를 수행하는 강력한 도구로, 다양한 소스에서 데이터를 수집하고 이를 분석하는 데 사용됩니다. SpiderFoot는 웹 애플리케이션으로도, CLI(Command Line Interface)로도 사용할 수 있으며, 모듈화된 방식으로 다양한 데이터를 수집할 수 있습니다. 아래는 SpiderFoot를 사용하여 OSINT를 수행하는 방법입니다.

1. SpiderFoot 설치

SpiderFoot는 Python으로 작성되어 있으며, 다음과 같은 방법으로 설치할 수 있습니다.

  • Linux/Unix
    git clone https://github.com/smicallef/spiderfoot.git
    cd spiderfoot
    pip3 install -r requirements.txt
    python3 ./sf.py
  • Docker를 사용한 설치
    docker pull smicallef/spiderfoot
    docker run -it -p 5001:5001 smicallef/spiderfoot

Docker를 사용하면 설치 과정이 단순해지고, 의존성 문제를 해결하는 데 유리합니다.

2. SpiderFoot 설정

설치 후 SpiderFoot 웹 인터페이스에 접근하려면 브라우저에서 http://localhost:5001로 접속할 수 있습니다. 여기서 SpiderFoot의 다양한 설정을 조정할 수 있습니다.

3. OSINT 작업 수행

OSINT 작업을 수행하기 위해서는 먼저 'Scan'을 설정해야 합니다.

  1. 새 스캔 생성
    • Scan Name: 스캔 이름을 지정합니다.
    • Target: 분석할 대상(도메인, IP 주소, 이메일 주소 등)을 입력합니다.
    • Modules: 사용할 모듈을 선택합니다. SpiderFoot는 200개 이상의 모듈을 제공하며, 수집하려는 정보에 따라 모듈을 선택할 수 있습니다.
    • Options: 각 모듈에 대한 옵션을 설정할 수 있습니다. 예를 들어, 특정 API 키를 입력하거나, 수집할 데이터의 범위를 지정할 수 있습니다.
  2. 스캔 시작
    • 모든 설정을 완료한 후 "Start Scan" 버튼을 클릭하여 스캔을 시작합니다. SpiderFoot는 선택한 모듈에 따라 대상에 대한 다양한 데이터를 수집하기 시작합니다.

4. 스캔 결과 분석

스캔이 완료되면, 결과를 다양한 형태로 분석할 수 있습니다.

  • 시각화: SpiderFoot는 수집된 데이터를 시각화하여 네트워크 그래프 형태로 제공해줍니다.
  • 필터링: 특정 키워드나 모듈에 기반한 필터링이 가능합니다.
  • 보고서 생성: 결과를 PDF 또는 HTML 형식으로 내보내서 보고서를 생성할 수 있습니다.

5. 활용 사례

SpiderFoot를 사용하여 다양한 정보를 수집할 수 있습니다.

  • 도메인 정보: Whois 정보, DNS 레코드, SSL 인증서 정보 등
  • 네트워크 정보: IP 주소 관련 정보, 포트 스캔 결과 등
  • 이메일 주소: 관련된 데이터 유출 정보, 소셜 미디어 계정 등
  • 소셜 미디어 분석: 특정 사용자나 기업의 소셜 미디어 활동 추적

6. 보안 관점에서의 고려사항

SpiderFoot를 사용할 때 몇 가지 보안 점검 포인트가 있습니다.

  • 데이터 유출 주의: OSINT는 공개된 데이터를 수집하는 것이지만, 민감한 정보가 수집될 수 있으므로 결과물의 보안에 유의해야 합니다.
  • API 키 관리: 일부 모듈은 API 키를 필요로 하며, 이를 안전하게 관리해야 합니다.
  • 법적 문제: 특정 정보를 수집하는 과정에서 법적 문제가 발생할 수 있으므로, 대상 정보에 대한 사전 검토가 필요합니다.

7. SpiderFoot를 활용한 보안 점검

SpiderFoot는 다양한 보안 점검에 활용될 수 있습니다. 예를 들어, 기업의 자산(도메인, IP 등)에 대한 공격 표면을 평가하거나, 경쟁사의 활동을 모니터링하는 데 유용합니다. 또한, 데이터 유출 가능성을 사전 탐지하여 대응 방안을 마련하는 데도 활용할 수 있습니다. SpiderFoot는 그 강력한 모듈과 자동화된 분석 기능 덕분에 보안팀에서 OSINT 작업을 효율적으로 수행하는 도구로 자리 잡을 수 있습니다.

NoSQL : Not Only SQL

일반적인 Threat Intelligence(TI) 운영과 비교했을 때 Redis와 같은 NoSQL 데이터베이스에 IP 평판 정보를 저장하고 활용하는 방법은 몇 가지 주요 차이점과 유사점을 가지고 있습니다.

  1. 데이터 저장 방식
    • 일반 TI 운영: 전용 TI 플랫폼(예: ThreatConnect, Recorded Future 등)을 사용하여 다양한 소스에서 정보를 수집하고, 이를 중앙화된 대시보드에서 관리합니다. 이러한 플랫폼은 종종 구조화된 데이터베이스를 사용하여 복잡한 쿼리와 분석을 지원합니다.
    • Redis 기반 운영: Redis와 같은 NoSQL 데이터베이스를 사용하여 IP 평판 정보를 저장하고 관리합니다. Redis는 빠른 읽기/쓰기를 지원하며, TTL 설정을 통해 자동으로 데이터를 만료시킬 수 있습니다. 그러나 고급 분석 기능은 제한적일 수 있습니다.
  2. 분석 및 시각화 도구
    • 일반 TI 운영: 전용 TI 플랫폼은 종종 내장된 분석 및 시각화 도구를 제공하여 실시간으로 위협 정보를 분석하고, 경향을 파악하며, 경고를 생성합니다.
    • Redis 기반 운영: Redis는 기본적으로 데이터 저장소로 사용되기 때문에, 추가적인 분석 및 시각화 도구(예: ELK 스택, Grafana 등)를 통합하여 데이터를 분석하고 시각화해야 합니다.
  3. 통합 및 자동화
    • 일반 TI 운영: 전용 TI 플랫폼은 다양한 보안 도구(SIEM, IDS/IPS 등)와 쉽게 통합되며, 자동화된 대응을 지원합니다.
    • Redis 기반 운영: Redis는 IP 평판 정보를 저장하는 데 사용되며, 별도의 스크립트나 자동화 도구(n8n, Airflow 등)를 사용하여 보안 도구와 통합해야 합니다.

유사점

  1. 위협 정보 수집
    • 두 방식 모두 여러 소스에서 위협 정보를 수집하여 중앙화된 데이터베이스에 저장합니다. 이 정보는 IP 평판, 악용 기록, 지리적 위치 데이터 등을 포함합니다.
  2. 데이터 갱신
    • 두 방식 모두 주기적으로 데이터를 갱신하여 최신 위협 정보를 유지합니다. Redis의 TTL 기능을 사용하여 데이터의 수명을 관리할 수 있습니다.
  3. 보안 이벤트 대응
    • 두 방식 모두 수집된 위협 정보를 기반으로 보안 이벤트를 모니터링하고, 의심스러운 활동을 탐지하며, 신속하게 대응합니다.

Redis를 사용하여 IP 평판 정보를 저장하고 활용하는 방식은 특정 용도에 최적화된 간단하고 효율적인 방법입니다. 특히 빠른 읽기/쓰기 성능과 TTL 설정을 통한 데이터 관리가 필요할 때 유용합니다. 그러나 고급 분석, 시각화 및 자동화 기능이 필요한 경우에는 전용 TI 플랫폼을 구축하는 것이 더 적합할 수 있습니다.

 

따라서 Redis 기반의 운영은 일반적인 TI 운영의 일부로 볼 수 있으며, 특정 요구사항에 맞게 최적화된 방법입니다. 필요한 경우 Redis와 전용 TI 플랫폼을 병행하여 사용하는 것도 좋은 접근법이 될 수 있습니다.

 

Threat Intelligence(TI)에서 다루는 정보들은 매우 다양하며, 이를 통해 보안팀은 더 나은 의사 결정을 내리고 위협에 신속하게 대응할 수 있습니다. TI에서 다루는 주요 정보들은 다음과 같습니다.

1. Indicator of Compromise (IoC)

  • 설명: 침해 지표로, 시스템이 이미 침해되었음을 나타내는 증거입니다.
  • 예시: 악성 IP 주소, 도메인, 해시 값, 악성 코드 서명 등.

2. Indicator of Attack (IoA)

  • 설명: 공격 지표로, 현재 진행 중인 공격 활동을 식별하는 데 사용됩니다.
  • 예시: 의심스러운 로그인 시도, 비정상적인 트래픽 패턴, 취약점 공격 등.

3. Tactics, Techniques, and Procedures (TTPs)

  • 설명: 공격자가 사용하는 전술, 기술, 절차를 설명합니다.
  • 예시: 피싱 메일 전송 방법, 특정 악성 소프트웨어 배포 기술, 공격자의 행동 패턴 등.

4. Threat Actor Profiles

  • 설명: 특정 위협 행위자 또는 해커 그룹에 대한 정보입니다.
  • 예시: 공격자의 동기, 목표, 사용 도구 및 기술, 과거 공격 이력 등.

5. Vulnerability Information

  • 설명: 소프트웨어 또는 시스템의 취약점 정보입니다.
  • 예시: CVE 목록, 취약점 상세 설명, 영향 범위 및 패치 방법 등.

6. Malware Analysis Reports

  • 설명: 악성 소프트웨어에 대한 상세 분석 보고서입니다.
  • 예시: 악성 코드의 동작 방식, 감염 경로, 탐지 방법, 제거 방법 등.

7. Phishing Information

  • 설명: 피싱 공격 관련 정보입니다.
  • 예시: 피싱 메일 샘플, 피싱 사이트 URL, 피싱 공격 패턴 등.

8. Open Source Intelligence (OSINT)

  • 설명: 공개 소스에서 수집된 정보입니다.
  • 예시: 소셜 미디어, 뉴스 기사, 블로그, 공개 데이터베이스 등에서 수집된 위협 관련 정보.

9. Threat Intelligence Feeds

  • 설명: 실시간으로 업데이트되는 위협 정보 스트림입니다.
  • 예시: 상업적 또는 오픈 소스 TI 피드, 최신 IoC, IP 평판 정보 등.

10. Geopolitical Intelligence

  • 설명: 지리적 및 정치적 상황이 보안에 미치는 영향에 대한 정보입니다.
  • 예시: 특정 지역에서의 사이버 공격 경향, 정치적 사건이 보안에 미치는 영향 등.

11. Behavioral Analysis

  • 설명: 사용자 또는 시스템의 비정상적인 행동 패턴 분석입니다.
  • 예시: 사용자의 비정상적인 로그인 시도, 시스템의 비정상적인 트래픽 생성 등.

12. Incident Response Reports

  • 설명: 과거 보안 사고에 대한 보고서 및 분석입니다.
  • 예시: 사고 발생 원인, 대응 방법, 재발 방지 대책 등.

13. Social Engineering Tactics

  • 설명: 사회 공학 기법에 대한 정보입니다.
  • 예시: 피싱, 스미싱, 비싱, 스피어 피싱 등 다양한 사회 공학 공격 기법.

14. Dark Web Intelligence

  • 설명: 다크 웹에서 수집된 위협 정보입니다.
  • 예시: 해킹 포럼, 데이터 유출 정보, 사이버 범죄 활동 등.

15. Attack Surface Information

  • 설명: 조직의 공격 표면에 대한 정보입니다.
  • 예시: 노출된 IP 주소, 인터넷에 공개된 서비스, 취약한 시스템 등.

 

이러한 정보들은 서로 연관되어 있으며, 종합적으로 분석되어야 효과적인 보안 대응 전략을 수립할 수 있습니다. Threat Intelligence는 다양한 소스에서 이러한 정보를 수집, 분석하고 실시간으로 업데이트하여, 보안팀이 최신 위협에 신속하게 대응할 수 있도록 지원합니다.

728x90

댓글