짤막한 이야기
-
[2022/03/14][짤막한 이야기 - UPX의 트릭]짤막한 이야기 2022. 3. 14. 10:41
[2022/03/14][짤막한 이야기 - UPX의 트릭] UPX(Ultimate Packer for eXecutables)는 가장 대표적으로, 범용적으로 활용되는 실행파일(소프트웨어) 압축 프로그램(= 패커)이다. UPX는 실행파일의 용량을 극단적으로 줄이기 위하여 파일 구조를 이용한 트릭을 사용한다. 일반적인 패킹과 언패킹을 생각해보면 패킹된 코드와 원본 코드의 사이즈가 같으며, 언패킹을 수행하기 위한 언패킹 루틴이 소프트웨어 내에 추가로 필요하다. 따라서 일반적인 패킹 기술을 프로그램에 적용하는 경우에는 프로그램 용량이 더 증가할 수도 있다. 그러나 코드 패킹 기술을 정말 압축률이 좋은 알고리즘을 이용한다면 원본 코드보다 훨씬 더 적은 양의 패킹된 코드가 생성될 것이고, 이는 용량을 감소시키는 역할을..
-
[2022/03/11][짤막한 이야기 - UPX]짤막한 이야기 2022. 3. 11. 11:33
[2022/03/11][짤막한 이야기 - UPX] UPX(Ultimate Packer for eXecutables)는 가장 대표적으로, 범용적으로 활용되는 실행파일(소프트웨어) 압축 프로그램(= 패커)이다. 일반적인 개발자들은 압축 프로그램하면 보통 AlZip, 7zip, BandiZip 등 다수의 프로그램을 하나로 묶어주며 용량을 줄여주는 그러한 소프트웨어를 생각하기 쉽다. 그러나 보안과 관련된 개발자들은 압축 프로그램을 그러한 관점에서만 바라보지 않는다. 이 압축 프로그램은 실행코드를 보이지 않게 감추어주는 역할을 한다. 즉, 다수의 프로그램이 아닌 단일의 실행파일(예: .EXE파일)에 대하여 내부를 압축해주는 프로그램인 것이다. 압축 해제는 프로그램이 실행될 때, 압축된 코드가 실행되기 직전에 알아..
-
[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. 09:16
[2022/03/02][짤막한 이야기 - 파일과 프로세스(=이미지)] 앞선 포스트에서 프로그램의 주소 체계는 파일 상태일 때와 프로세스 상태(=이미지 상태)일 때 다르다고 서술하였다. 모든 프로그램은 헤더(Header)와 바디(Body, 섹션 바디라고도 함)로 구성되어 있는데, 바디는 그 역할에 따라서 특정한 이름의 섹션으로 구성되어 있다. 예를 들면 실제 실행코드를 가지고 있는 Code 섹션(Windows에서는 보통 .text 영역), 변수값이나 문자열 등을 가지고 있는 Data 섹션(Windows에서는 보통 .data 영역), 사용할 함수의 정보를 가지고 있는 Import 섹션(Windows에서는 보통 .idata 영역) 등이 있다. 즉, 프로그램의 각 역할들은 섹션의 바디에서 결정되는 것이다. 그런..