분류 전체보기
-
[2022/03/10][짤막한 이야기 - 구획 난독화]짤막한 이야기 2022. 3. 10. 11:43
[2022/03/10][짤막한 이야기 - 구획 난독화] 난독화(Obfuscation)는 소스코드, 어셈블리어, 자료구조, 제어흐름 등 소프트웨어를 구성하는 요소를 이해하기 어렵게 변형시켜버리는 기술이다. 소프트웨어 지적재산권 보호를 위하여 적용되지만, 악성코드를 보호할 수도 있기 때문에 난독화에 더불어 역난독화(Deobfuscation) 기술도 함께 연구되어야 한다. 난독화 기술 중 가장 쉬운 기술은 소스코드 레벨에서 주로 이루어진다. 바로 주석을 제거하는 것(Remove Comment)이다. 그리고 변수명이나 함수명을 변형하는 것(Modify Identifier)이다. 이러한 기술들을 통틀어 난독화 중에서도 구획 난독화(Layout Obfuscation)라고 한다. 즉, 프로그램의 기능과는 전혀 무관한..
-
[2022/03/08][짤막한 이야기 - 난독화 지표]짤막한 이야기 2022. 3. 8. 19:19
[2022/03/08][짤막한 이야기 - 난독화 지표] 난독화(Obfuscation)는 소스코드, 어셈블리어, 자료구조, 제어흐름 등 소프트웨어를 구성하는 요소를 이해하기 어렵게 변형시켜버리는 기술이다. 소프트웨어 지적재산권 보호를 위하여 적용되지만, 악성코드를 보호할 수도 있기 때문에 난독화에 더불어 역난독화(Deobfuscation) 기술도 함께 연구되어야 한다. 일전에도 난독화 기술로써 여러가지 구체적인 기술을 소개한 바 있었으며, 매우 강력한 보호 기능을 가지는 기술도 있다고 언급하였다. 그러나 난독화도 결국 소프트웨어 보안의 한 갈래이기 때문에 “소프트웨어 보안의 안전성”을 “정량적 지표(이른바 수치화)”로 표현하기 어려운 것처럼, “난독화 기술의 보호 강도” 또한 “정량적 지표”로 표현하기 어..
-
[2022/03/07][짤막한 이야기 - 소프트웨어 보안의 안전성]짤막한 이야기 2022. 3. 7. 12:29
[2022/03/07][짤막한 이야기 - 소프트웨어 보안의 안전성] 소프트웨어 보안이란 소프트웨어를 보호하는 기술 혹은 이론을 의미한다. ASLR(Address Set Layout Randomization), DEP(Data Executable Protection), W^X(Write xor eXecute) 등 이미 시스템 자체적으로 적용되는 기본적인 보호 기술 뿐 아니라, 난독화(Obfuscation), 제어흐름 무결성 검증(Control-Flow Integrity), 원격 검증(Remote-Attestation) 등 활발하게 연구되고 적용하기 위하여 움직이는 보호 이론 등을 모두 포함하는 것이다. 그만큼 소프트웨어가 보호받지 않으면 매우 위험하며, 시스템 전체를 장악당할 수 있기 때문에 안전하게 보호..
-
[2022/03/04][짤막한 이야기 - 코드 패킹과 W^X]짤막한 이야기 2022. 3. 4. 09:38
[2022/03/04][짤막한 이야기 - 코드 패킹과 W^X] W^X는 대표적인 소프트웨어 보호 기술이다. 코드 삽입(Code Injection)을 통한 공격을 가장 손쉽게 방지할 수 있는 기술이며, 코드실행 권한과 코드쓰기 권한을 동시에 부여하지 않음으로써 각 섹션의 권한을 한정할 수 있는 것이다. 현대의 컴파일러에 의하여 컴파일되는 소스코드는 자동적으로 이 W^X가 적용되게끔 설정되어 있다. 즉, 현대의 프로그램은 기본적으로 W^X를 포함하고 있는 것이다. 그런데 코드 패킹(Code Packing) 기술을 기억하는가? 코드 패킹은 미리 실행코드를 다른 값으로 변형하여 놓았다가 실행되기 직전에 이를 언패킹한다고 하였다. 언패킹이라는 행위는 “패킹된 코드를 원본 실행코드로 복원”하는 행위이며, 이른바 코..
-
[2022/03/03][짤막한 이야기 - W^X]짤막한 이야기 2022. 3. 3. 07:10
[2022/03/03][짤막한 이야기 - W^X] W^X는 대표적인 소프트웨어 보호 기술이다. 일반적으로 프로그램에는 섹션이 존재하며, 섹션에는 권한이 존재한다. 권한은 읽기(Read), 쓰기(Write), 실행(Execute)의 3가지 권한이 존재하며, 모든 섹션에는 이러한 권한을 하나 이상은 가지고 있다. W^X는 Write xor(^) eXecute라는 의미이며, 쓰기(Write)와 실행(Execute)은 배타적논리합(Exclusive OR)의 관계라는 의미이다. 이는 쓰기와 실행이 둘 다 부여되는 경우는 절대로 없다는 의미이며, 특정한 섹션에 권한을 부여할 때 쓰기와 실행이 함께 존재하면 위험하다는 의미이다. 읽기(Read) 권한의 경우 반드시 필요하기 때문에 실행코드 영역이나 데이터 영역에 모두..
-
[2022/03/02][짤막한 공지 - 카카오뷰 친구추가(채널구독)하고 전자책 받기]짤막한 공지 2022. 3. 2. 13:19
[2022/03/02][짤막한 공지 - 카카오뷰 친구추가(채널구독)하고 전자책 받기] 안녕하세요, 루니프입니다. 이번에 카카오뷰(KakaoView) 플랫폼에 입성하였습니다. 카카오뷰는 인스타그램보다 더욱 접근성이 높고 또한 포스트가 주제별로 분류되어있기 때문에 구독하시면 더 많은 정보를 효율적으로 얻어가실 수 있습니다. 카카오뷰(주소는 프로필의 링크트리 참고)의 채널을 구독하여주시는 모든 분들께는 핀툴 프로그래밍 기본서를 1권 무료로 제공하여드립니다. 참여방법은 카카오뷰 채널구독 후 메일로 원하시는 핀툴 프로그래밍 기본서(제1부 ~ 제4부)와 구독 인증샷을 보내주시면 됩니다. 해당 이벤트는 예고 후 종료될 수도 있습니다만, 아마 종료되지 않을 것 같습니다. 앞으로도 개발자와 분석가 여러분들에게 더욱 알찬..
-
[2022/03/02][짤막한 이야기 - 파일과 프로세스(=이미지)]짤막한 이야기 2022. 3. 2. 09:16
[2022/03/02][짤막한 이야기 - 파일과 프로세스(=이미지)] 앞선 포스트에서 프로그램의 주소 체계는 파일 상태일 때와 프로세스 상태(=이미지 상태)일 때 다르다고 서술하였다. 모든 프로그램은 헤더(Header)와 바디(Body, 섹션 바디라고도 함)로 구성되어 있는데, 바디는 그 역할에 따라서 특정한 이름의 섹션으로 구성되어 있다. 예를 들면 실제 실행코드를 가지고 있는 Code 섹션(Windows에서는 보통 .text 영역), 변수값이나 문자열 등을 가지고 있는 Data 섹션(Windows에서는 보통 .data 영역), 사용할 함수의 정보를 가지고 있는 Import 섹션(Windows에서는 보통 .idata 영역) 등이 있다. 즉, 프로그램의 각 역할들은 섹션의 바디에서 결정되는 것이다. 그런..
-
[2022/02/28][짤막한 공지 - 역공학 전자책 받고 공부해서 또 받기]짤막한 공지 2022. 2. 28. 13:38
[2022/02/28][짤막한 공지 - 역공학 전자책 받고 공부해서 또 받기] 안녕하세요, 루니프입니다. 작년 이맘때 쯤에도 진행하였던 신학기 이벤트를 이번에도 진행하겠습니다. 이번에는 “SNS 공유 이벤트”가 아니라 “전자책 받고 공부해서 또 받기 이벤트”를 진행합니다. 룰은 아래와 같습니다. 1. 본 이벤트는 루니프의 인스타그램을 팔로우하신 경우에만 진행이 가능합니다. 따라서 이벤트 시작 전 팔로우 여부를 검사합니다. 2. 본 이벤트 참여를 희망하시는 분은 카카오톡 오픈채팅방(핀툴(PinTool)로 역공학(리버싱) 입문하기)에 입장하셔서 “공부하기 이벤트에 참여하겠소”라고 외쳐주세요. 3. GMail을 통하여 핀툴 프로그래밍 기본서의 구독권한을 부여해드립니다. 이 때, 제1부 ~ 제4부 중 공부하기를..