Security
HTML 파일 포맷 검출 로직
이무쿤
2022. 1. 1. 18:16
반응형
HTML
- HTML 파일은 악성코드 URL 등이 삽입되어서 호출 될 때 취약점 발생가능
- 공백 하나라도 바뀔 시, 다른 악성코드 URL로 수정될 시 MD5가 계속 바뀌므로 패턴 DB 수정이 계속 일어남
- 따라서 MD5 해시 값으로 악성코드 검사 불가능
- 정규 표현식 사용
- r'\w+@\w.\w+'
- r은 파이썬에서 문자열을 임의로 해석하지 말라는 의미
- 없으면 \n을 엔터키로 해석
- w는 영문자(소문자/대문자), 숫자, _(언더바) 표현
- +는 1번 이상 등장
- r은 파이썬에서 문자열을 임의로 해석하지 말라는 의미
- python에서 re 모듈로 정규식 적용 간편
- re.findall(정규식, 문자열)
- 문자열에서 정규식 적용된 부분만 찾아서 반환
- re.findall(정규식, 문자열)
- r'\w+@\w.\w+'
- 텍스트 파일인지 확인
- 파일은 텍스트 파일 or 바이너리 파일
- p_text = re.compile(r'[\w\s!"#$%^\'()*+,\-,/:'<=>?@\[\\\]\^_'{\|}~]')
- n_text = len(p_text.findall(buf))
- if n_text / float(len(buf)) > 0.8?
- 텍스트에서 나올 수 있는 글자 수가 buf의 전체 길이에서 80% 이상 차지 시 텍스트 파일로 간주
- 한글은 위 정규표현식 패턴으로 검출이 안되므로 20%는 남김.
- 텍스트 파일이라면 HTML에서 자주 사용되는 키워드로 검출
- pat = \r'<\s*html\b|\bdoctype\b|<\s*head\b|<\s*title\b|<\s*meta\b|\bhref\b|\blink\b|<\s*body\b|<\s*script\b|<\s*iframe\b|<\?(php\b)?'
- re.compile(pat, re.IGNORECASE)
- 대소문자 구분없이 매칭
- https://regex101.com/
- HTML 파일 내부의 스크립트 파일 추출
반응형