KISA 보호나라는 인터넷 침해사고 관련 예방과 대응 소식을 공유해주는 곳으로 사이버 보안 관련 다양한 자료를 제공하고 있습니다. 인터넷 침해사고 발생 상황에 따른 경보 안내와 보안 취약점 정보, 각종 패치 정보를 제공함으로써 사용자에게 안전한 인터넷 생활을 할 수 있도록 도와주고 있습니다.
▷ KISA 인터넷 보호나라에서는 사이버위협 경보 단계를 정상, 관심, 주의, 경계, 심각 등 5단계로 나뉘어 실시간으로 상태를 제공해주고 있습니다. 각 단계별 세부 설명은 아래 링크를 통해 확인이 가능합니다.
▷ KISA 인터넷 보호나라 자료실에는 보안공지, 보고서, 취약점 정보 등 다양한 자료를 제공해주고 있습니다. 자료실의 내용은 아래 링크를 통해 확인이 가능합니다.
▷ 위에서 설명한 KISA 인터넷 보호나라에서 제공하는 인터넷 침해사고 경보 정보와 보안공지에 대해 파이썬을 이용하여 모니터링과 자동 수집 방법에 대해 소개드립니다.
▷ 모니터링 자동화를 위해 필요한 파이썬 모듈과 설치 방법은 아래와 같습니다.
→ Selenium 모듈 설치 : pip install selenium
→ datetime 모듈 설치 : pip install datetime
→ dateutil 모듈 설치 : pip install python-dateutil
→ pip install beautifulsoup 모듈 설치 : pip install beautifulsoup4
▷ 동작 방식은 아래와 같습니다.
→ KISA 인터넷 보호나라 웹사이트에 접속 후 메인 페이지 정보를 가져옵니다.
→ 인터넷 침해사고 경보 단계에 대한 결과 정보를 가져와 원하는 형태로 데이터를 가공합니다.
→ 보안공지 등 자료실에 업데이트된 문서가 있는지 확인하고 해당 기간의 데이터가 있다면 관련 정보를 수집합니다.
▷ 동작 방식을 파이썬으로 구현한 내용은 아래와 같습니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import datetime
from dateutil.parser import parse
# 현재 시간 정보 가져오기와 1일 전 데이터 수집
today = datetime.datetime.now()
today_diff = today + datetime.timedelta(days=-1)
# webdriver 옵션
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko")
# webdriver 설정(Chrome, Firefox 등) - Headless 모드
driver = webdriver.Chrome('chromedriver.exe', options=chrome_options)
# KISA 보호나라 URL 정보
url = 'https://www.boho.or.kr'
try:
driver.get(url)
time.sleep(2)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 인터넷 침해사고 경보 정보 수집
bohonara = soup.select_one('head > title').text
alert_msg = soup.select_one('#gnb > div > div > div')
articles = soup.select_one('#totalNewsPC > div > ul')
alert_msg_title = alert_msg.h2.text
alert_msg_date = alert_msg.find(attrs={'class': 'todayDate'}).text
alert_msg_state = alert_msg.find(attrs={'class': 'state'}).text
print(bohonara, ' ', alert_msg_title, ' ', alert_msg_date, ' ', alert_msg_state, '\n')
# 보안공지 업데이트 확인과 자료실 문서 카테고리별 분류
for article in articles:
if article.find('span') == -1:
pass
else:
article_type = article.find_all('span')[0].text
if article_type == 'E N G':
article_type = '해외소식'
article_date_raw = article.find_all('span')[1].text
article_date_trans = article_date_raw.replace(".", "-")
article_date = parse(article_date_trans)
article_title = article.a.text
article_title_strip = article_title.strip()
article_link = url + article.a['href']
if article_date.date() >= today_diff.date():
print('[', article_type, '] ', article_title_strip, article_date.date(), article_link)
except Exception as e:
print(e)
finally:
driver.quit()
▷ 위의 스크립트 실행시 아래와 같이 결과가 출력됩니다.
▽ 같이 보면 더 좋은 블로그 글 ▽
RSS를 이용한 보안뉴스 클리핑 자동화 with 파이썬 (2) | 2020.12.07 |
---|---|
인스타그램 좋아요, 맞팔 자동화 with 파이썬 (13) | 2020.12.04 |
쿠팡에서 내 제품 검색 결과 확인 자동화 with 파이썬 (7) | 2020.11.21 |
파이참(pycharm) 단축키 설명 (1) | 2020.11.17 |
웹페이지의 외부 URL 리스트 확인 방법 with 파이썬 (3) | 2020.11.13 |
댓글 영역