목록KISA 사이버 보안 훈련 (60)
작은 메모장
Yara Rule 작성 시, 더욱 다양한 조건을 표현할 수 있도록 확장 기능을 제공 룰 작성시 상단에 import [모듈 명]을 작성하여 모듈을 불러올 수 있음 [모듈 명].[함수 명] 형태로 모듈이 제공하는 함수만 사용 가능 Import "pe" rule singleSection { condition: pe.number_of_sections == 1 ... } PE 모듈 Portable Executable, 윈도우 실행 파일에 대하여 자세한 규칙을 작성 제공하는 주요 함수 및 속성값은 아래를 따름 함수/속성 의미 반환 값 checksum OptionalHeader에 저장된 PE 체크섬 값 반환 정수 calculate_checksum() PE 체크섬 값을 계산하여 값을 반환 정수 subsystem 실행 ..
조금 더 어려운 문제들을 풀어보자 문제풀이에 사용될 악성파일은 기본적으로 제공받은 파일을 사용하였음 첫 번째 문제 아는 정보가 너무 한정적 기본적인 Yara룰부터 만들고 시작 BinText는 프로그램 바이너리 내에서 택스트 문자만 추출해주는 프로그램 즉, 이 파일을 특정할 수 있는 텍스트를 직접 탐색하는 프로그램 조건에서 언급한 악성 파일을 BinText에서 실행 텍스트들을 내리다보면 PADDING이 무진장 길게 써있는 텍스트를 발견 일반적인 프로그램들은 16진수 값으로 00을 작성하는 편이 대다수 이 파일은 PADDINGXX라는 값으로 이를 표현함 이를 Yara Rule에 추가 작성한 룰을 바탕으로 하위 디랙토리에 있는 파일까지 검사 후, result.txt에 이를 저장 뭐가 잔뜩 나오긴 함, 그래도 ..
기본적인 내용을 다루는 Yara Rule 작성을 실습해보자 분류 대상 파일은 기본제공된 파일셋을 사용 첫 번째 문제 기본적으로 Yara Rule을 작성하므로, yar파일을 생성해보자 여기에 간단한 룰명과 설정을 지정 룰의 조건은 아주 간단함 "potato" 문자열을 strings 영역안에 조건으로 두고, 이 조건 모두에 해당하는 파일이 있으면 분류 대상으로 지정 해당 폴더 안에서 yara를 실행시키면 3개의 파일이 탐지되는 것을 볼 수 있음 실제로 존재하는지 확인 실제로 문자열이 존재하는 것을 확인 두 번째 문제 비슷한 조건이긴 하나, 이번엔 16진수를 찾는 문제로 바뀌었음 첫 번째 문제에서 strings조건만 살짝 바꾸면 해결되는 문제 실행하면 3개의 파일이 탐지된 것을 확인 실제로 16진수 값이 존재..
Yara Rule 작성 방법 무엇을 분류할지 정함 IOC 정보를 수집 => 이를 바탕으로 Rule 파일을 작성 참고하면 좋은 예시 Yara전반:https://yara.readthedocs.io/ YaraRule작성 실 사례:https://github.com/Yara-Rules/rules Yara Rule 구조 기본적으로 .yar의 확장자를 가진 파일로 되어있음 파일은 크게 두 영역으로 나뉘는데, 모듈 및 다른 Yara Rule 호출 영역, Rule 선언 영역 모듈 및 Yara Rule 호출 영역은 해당 룰 파일 안에서 함께 쓸 모듈 혹은 Rule 파일이 어떻게 실행되는지를 선언 Include "./rules/thisIsTestRules.yar" Import "pe" Rule 선언 영역에서는 어떤 IOC ..
Yara? VirusTotal에서 만든 악성코드의 패턴을 이용하여 악성 파일을 분류하는데 사용되는 도구 간단한 룰을 작성하여 룰에 맞는 악성코드를 판단 문자열과 바이너리 패턴을 기반으로 파일 탐지 Triage 프랑스어로 '선별'이라는 뜻 응급상황 발생 시 병원에서 치료의 우선순위를 정하기 위한 분류체계로 사용됨 정보보안에서의 트리아지는 수 많은 분석대상 중 악성으로 의심되는 파일을 선별하는 과정 모든 악성코드를 분류하기에는 인적/물적 자원이 부족하기에 트리아지를 실행 분석 대상을 선별하여 위험도에 따라 우선순위를 정함 IOC Indicator Of Compromise의 약어. 침해지표를 의미 위협활동을 특정할 수 있는 데이터 더보기 악성 파일의 Hash 악성 행위 수행 후 남는 로그 악성 파일을 배포한 ..
조금 더 복잡한 문제를 풀어보자 첫 번째 문제 대한민국 전화번호부만 살펴 보자. 미국의 경우, 무조건 1로 전화번호가 시작한다. 일본의 경우, 0120으로 전화가 시작한다. 반면 대한민국의 경우, 02, 031, 032, 033, 041 등 다양하다. 결과적으로, 대한민국 전화번호 앞자리는 0으로 시작하고 1~6의 숫자가 한번 혹은 두번 나오는 구조로 되어있다. (0[1-6]{1,2}) 전화번호의 중간번호는 0~9의 숫자가 3개 혹은 4개의 숫자로 이루어져 있다.( \d{3,4} ) 전화번호의 마지막번호는 0~9의 숫자가 4개로 이루어져 있다. ( \d{4} ) 종합적으로, 위 문제의 정규표현식은 /0[1-6]{1,2}-\d{3,4}-\d{4}/g로 표현 가능하다. 두 번째 문제 010으로 번호가 시작해..
배운 정규표현식을 사용하여 다양한 필터링을 진행해보자 첫 번째 문제 단순하게 생각하면, 숫자의 범위인 0~9까지 탐지하도록 지정해주면 된다. 때문에, /[0-9]/g가 가장 기초적인 해답이 될 것이다. 하지만, 이보다 더 경량화시킬 수 있는 방법이 있다. 바로, /\d/g로, \d는 숫자만을 탐지하는 정규표현식이다. 두 번째 문제 위와 동일한 방법으로, 영문, 숫자, _를 제외한 문자를 입력하는 식을 만들면 된다. 따라서, /[^A-z0-9]/g가 기초적인 해답이 된다. 하지만, 더 간단한 방법이 존재한다. 앞서 공부했던 내용 중, 단어만을 제외하고 탐지하는 정규표현식이 존재했다. 이를 사용하면, /\W/g가 조건에 부합하는 정규표현식이 될 것이다. 세 번째 문제 이 문제는 공백을 제외하는 조건이 걸려있..
정규표현식이란 문자열의 일정한 규칙(패턴)을 표현하는 형식 언어 간단한 규칙을 작성하여 규칙에 맞는 문자열 검색 단순히 득정 문자열의 포함/제외 뿐 아니라 반복 표현 지원 그래서 이걸 어케 씀? 아래와 같은 문장을 보자 더보기 정규 표현식이라는 문구는 일치하는 텍스트가 준수해야 하는 "패턴"을 표현하기 위해 특정한 표준의 텍스트 신택스를 의미하기 위해 사용된다. 여기서, 텍스트라는 단어를 검색하려고 한다. 그러면 /텍스트/g라는 정규표현식을 사용한다. 더보기 정규 표현식이라는 문구는 일치하는 텍스트가 준수해야 하는 "패턴"을 표현하기 위해 특정한 표준의 텍스트 신택스를 의미하기 위해 사용된다. 근데, 그냥 텍스트가 아니라 앞뒤로 공백이 있는 텍스트라는 단어를 검색하려고 한다. 그러면 \s/텍스트\s/g라..