IT&보안151

C로 작성한 실행파일(exe)에 음악넣기 갑자기 실행파일에 음악포함? 배경은 어셈블리와 리버싱 기초 스터디를 진행하면서 간단한 크랙미 형태의 문제를 내주었는데 그 때 사람들이 음악을 들으면서 하면 좋을 것 같아서 음악을 실행파일에 포함해 보았지요. 안그래도 답답할텐데 노이로제걸릴만한 음악이 자꾸 나오면 ^___^ 강한 멘탈을 심어주기 위한 저의 세심한 배려?라고 볼 수 있겠네요. 자 이제 시작해봅시다!! visual studio 2017을 사용했구요. .c형태의 C언어로 작성하였습니다. 먼저, 프로젝트를 만들고 리소스파일을 우클릭 합니다. [그림1]과 같이 [리소스파일]을 우클릭 후 [추가] - [리소스] 를 누릅니다. [그림2]를 보면 icon을 가져오기해서 추가할 수도 있습니다. 맨 아래에 "WAVE"라고 나오는 부분이 있는데 원래는 없어야.. 2019. 7. 27.
Windows에서 Shellcode 작성하기 오늘은 shellcode작성하기로 포문을 열겠습니다. 갑자기 shellcode? 이럴 수 있지만.. symbolic execution을 하는 과정에서 비트벡터 내 shellcode를 삽입하고 메모리에 올리기 위한 기초공사로 shellcode를 만들고 있지요. 그럼 시작해 볼까요? shellcode 넌 누구니?! 위키백과가 왈 "컴퓨터 보안에서 셸코드란 작은 크기의 코드로 소프트웨어 취약점 이용을 위한 내용부에 사용된다." "셸코드로 불리는 까닭은 일반적으로 명령 셸을 시작시켜 그곳으로부터 공격자가 영향 받은 컴퓨터를 제어하기 때문이다." 요약해보면 "취약점을 이용해 내부에 삽입하는 코드" 정도로 보이네요. shellcode는 악성동작을 하는 코드인 페이로드(payload)이고, 실제로 공격을 하려면 sh.. 2019. 7. 27.
Virtual address 날씨가 많이 덥지만 시간은 정신없이 지나가네요.. 방학시즌이라 그런지 여러가지주제로 교육이나 컨퍼런스등이 많네요~ 19년 7월 9, 10, 11일 KISA 핀테크 기술지원센터에서 주최하는 git 교육으로 시작해서, 19년 7월 10일 블록체인 TechBiz 컨퍼런스와, 19년 7월 13일은 BOAZ에서 빅데이터컨퍼런스도 하고, 19년 7월 16일에 이스트시큐리티에서 2019 엔드포인트 보안컨퍼런스도 있구.. 19년 7월 16일에 KISA에서 사이버 빅데이터 교육 공통과정도 있네요.. 오늘이 7월 12일이니까.. 7월 16일에 이스트시큐리티의 컨퍼런스 대신 저는 빅데이터 교육을 들으러 가겠네요..ㅜㅡ 19년 7월 18일은 KISA 핀테크 기술지원센터에서 금융시장의 데이터를 빅데이터로 활용하는 방법에 대해 .. 2019. 7. 12.
kerberos 버전별 구현[소스] 오늘부터는 글의 자유도를 높이기 위해 의식의 흐름기법에 따라 끄적끄적 하도록 하겠습니다ㅏㅏ~ kerberos? 커베로스 커버로스 .. 여러가지 이름으로 불리네요. 저는 처음 배울 때 커버로스로 배웠기 때문에 커버로스라고 말을 하겠습니다. 커버로스는 version1부터 version5까지 나왔는데 여기서는 버전 1과 버전 2를 직접 구현하러 떠나봅시다~ 1. 이 커버로스에 대해 알아봅시다!! 1-1) 커버로스란 무엇일까요? ▶ 검색을 해보니 그리스신화에서 저승문을 지키는 머리가 3개인 개님의 이름? 이라고 나오네요. ▶ 조금더 자세히 설명하면 MIT에서 개발된 대칭키 방식에 의한 인증시스템 정도로 볼 수 있겠네요. 2. 커버로스 버전1 2-1) 커버로스 버전1의 원리를 먼저 알아볼까요? # 그림이 조금 그.. 2019. 6. 30.
AFL_fuzzer 설치 및 사용방법[영상포함] 1. AFL fuzzer란? (1) 프로그램에 무작위 데이터를 입력해서 버그 및 취약점을 찾는 툴 (2) 소스코드가 주어질 경우 입력받는 곳의 루틴을 자동으로 찾음 ▶ input 값에 대한 무작위 데이터 생성 (3) 블랙박스 테스트는 가능은 하지만 효과적이지 못하다는 단점... 2. AFL fuzzer의 지원 (1) 지원가능한 언어 ▶ C, C++, Objective C(OSX, IOS) (2) 지원가능한 OS ▶ Linux, OpenBSD, FreeBSD, NetBSD ▶ 32비트, 64비트 (3) 지원가능한 컴파일러 ▶ gcc, g++, clang, clang++ (씨랭이라고 읽고 C_language의 약자) 3. AFL_fuzzer의 기능 4. AFL_fuzzer 설치방법 5. AFL_fuzzer .. 2019. 6. 24.
파일시스템 1. 파일시스템의 이해 1) 파일시스템의 종류 ▶ FAT, NTFS[Windows], EXT2/3/4[Linux], HFS[Apple] 2) 플래시 메모리의 특성 ▶ Erasing Block ▶ Random Access ▶ Wear Leveling 3) 일반적인 파일시스템의 구성 ▶ Boot Sector ⤷ Drive의 시작부분, Drive를 어떻게 읽을지 결정 ▶ Index or Metadata ⤷ Drive에 존재하는 파일이나 폴더들의 정보를 제공 ▶ Data ⤷ 각 파일에 대한 실제 Data 저장 4) 파일 데이터의 구성 [두 가지 구성방식] ▶ Cluster Chain ⤷ 파일의 크기가 커서 연속되거나 분산된 여러 개의 클러스터에 저장 후 이를 연결한 구조 및 형태 ⤷ 하드를 여러 개의 블록으로 .. 2019. 6. 17.
Peach Fuzzer install 1. 시스템에 Mono repository 등록 ▶ sudo apt install gnupg ca-certificates ▶ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF ▶ echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list ▶ sudo apt update 2. Mono 설치(Mono를 설치하는 이유? peach3.x버전이 C#으로 제작되었기 때문) ▶ sudo.. 2019. 6. 3.
위장 악성코드를 실행하는 방법 ※ OS : Windows환경의 악성코드 1. 위장 악성코드 ▶ 악성코드 제작자는 악성코드를 은닉하기 위해 여러가지 방법을 개발한다. ▶ 즉, 탐지를 우회하기 위해 위장 실행 기법을 개발한다. 2. Launchers(실행기) (1) Launcher란? [1] Loader라고도 부르며 현재 실행하고 있거나 추후에 (은밀하게) 실행하기 위해 자기자신이나 다른 악성코드를 설정하는 악성코드이다. [2] 편의상 exploit이라고 생각하려고 한다. (2) Launcher가 필요한 이유? [1] 나쁜 짓 할 때 사용자에게 걸리지 않으려고? 설정하기 위해서..ㅎ (3) Launcher가 로딩할 악성코드를 포함한 경우 [1] .exe파일이나 .dll을 자신의 resource section에 가지고 있다. [2] PE파.. 2019. 5. 31.
Ciphertext Only Attack(암호문 단독 공격) 구현 1. Ciphertext Only Attack(암호문 단독 공격) ▶ 공격자가 암호문만 알고 있을 때 사용할 수 있는 암호해독 기법이다. ▶ 암호공격 시 오직 암호문만 가지고 평문이나 키를 찾아야 하기 때문에 공격자 입장에서는 가장 어려운 공격방식이다. ▶ 대부분의 사람이 암호를 깬다고 얘기하는 말은 암호문 단독공격에 해당한다. ▶ 뭐.. 이유는 무차별공격, 빈도수분석 등의 공격이기 때문이다. ▶ 이용하는 방법은 평문의 통계적 성질 및 문장의 특성을 추측해서 해독을 시도한다. (1) 소스 msg = '53%%#305))6*;4826)4%=\')4%);806*;48#8@60\'))85;1%(;:-%*8#83(88)5*#;46(;88*96*?;8)*%(;485);5*#2:*%(;4956*2(5*c4)8@8*.. 2019. 5. 31.
Known Plaintext Attack(기지 평문 공격) 구현 1. Known Plaintext Attack(기지 평문 공격) ▶ 공격자가 평문과 평문을 암호화한 암호문을 모두 알고 있을 때 사용할 수 있는 암호해독 기법이다. (1) 소스 msg = '53%%#305))6*;4826)4%=\')4%);806*;48#8@60\'))85;1%(;:-%*8#83(88)5*#;46(;88*96*?;8)*%(;485);5*#2:*%(;4956*2(5*c4)8@8*;4069285);)6#8)4%%;1(%9;48081;8:8%1;48#85;4\')-485#528806*81(%9;48;(88;4(%?34;48)4%;161;:188;%?;' # 알려진 평문이 있을 경우 사용 가능 # 이 암호문 중에 goodglass, mainbranch 단어가 있는 것을 알 때 # 패턴을 비교해야.. 2019. 5. 31.
RSA를 이용한 전자서명(디지털서명) 구현 1. RSA를 이용한 전자서명(디지털서명) (1) RSA 전자서명 알고리즘 ▶ 예전에 정리한 내용이 있어서 아래 URL을 통해 확인이 가능하다. ▶ 참고 : https://ccurity.tistory.com/93 (2) 전자서명(디지털서명)의 방법 [1] 메세지 전체에 서명 ▶ 메모리 비용이 많이 든다. [2] 인증자(authenticator)에 대한 서명 ▶ 작은 비트블록인 인증자에 서명을 할 경우 인증자 변경 없이 문서만 변경하는 것은 불가능하다. ▶ 인증자 부분만 서명을 하기 때문에 기밀성은 보장할 수 없다. [3] 메세지의 해시값에 서명 ▶ 해시와 해시를 암호화 한 것을 공개키로 풀어서 비교가 가능하다. ※ Hmac을 사용하면 안되는 이유는? ▶ 키를 공통으로 쓰기 때문에 중간에 변경하고 다시 암.. 2019. 5. 31.
RSA공개키를 이용한 암호화 구현 1. RSA공개키를 이용한 암호화 (1) RSA공개키 암호 알고리즘 ▶ 예전에 정리한 내용이 있어서 아래 URL을 통해 확인이 가능하다. ▶ 참고 : https://ccurity.tistory.com/88 (2) RSA의 특징 [1] 개인키를 알면 공개키를 구할 수 있다. [2] 그러나 공개키를 안다고해서 개인키를 구할 수는 없다. [3] 소스 from Crypto.PublicKey import RSA def main(): msg = b'hellow!' print(msg) private_key = RSA.generate(1024) # 개인키를 하나 만듬 print('private_key : {}'.format(private_key)) public_key = private_key.publickey() # .. 2019. 5. 30.