ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022/03/03][짤막한 이야기 - W^X]
    짤막한 이야기 2022. 3. 3. 07:10
    728x90
    반응형

    [2022/03/03][짤막한 이야기 - W^X]
    W^X는 대표적인 소프트웨어 보호 기술이다.
    일반적으로 프로그램에는 섹션이 존재하며, 섹션에는 권한이 존재한다.
    권한은 읽기(Read), 쓰기(Write), 실행(Execute)의 3가지 권한이 존재하며, 모든 섹션에는 이러한 권한을 하나 이상은 가지고 있다.
    W^X는 Write xor(^) eXecute라는 의미이며, 쓰기(Write)와 실행(Execute)은 배타적논리합(Exclusive OR)의 관계라는 의미이다.
    이는 쓰기와 실행이 둘 다 부여되는 경우는 절대로 없다는 의미이며, 특정한 섹션에 권한을 부여할 때 쓰기와 실행이 함께 존재하면 위험하다는 의미이다.
    읽기(Read) 권한의 경우 반드시 필요하기 때문에 실행코드 영역이나 데이터 영역에 모두 부여되지만, 실행 권한의 경우 실행코드 영역에, 쓰기 권한의 경우 데이터 영역에만 존재하는게 일반적이다.
    만약 실행코드 영역에 쓰기 권한까지 주어진다면 어떻게 될까?
    그렇다면 악의적인 해커가 프로그램의 취약점을 이용하여 실행코드 영역에 악성코드를 삽입(쓰기)한 후 그 코드를 실행하는 것이 용이해진다.
    반면 실행코드 영역세 쓰기 권한은 없다면, 악의적인 해커가 취약점을 발견하더라도 그 취약점을 공격(Exploit)할만한 코드를 생성하거나 삽입하는 것은 어려워진다.
    즉, W^X 원리만을 정확히 지켜낸다면, 적어도 코드 삽입(Code Injection) 공격에는 안전한 프로그램을 만들 수 있는 것이다.
    반면에 W^X 원리를 정확히 지키지 못한다면, 코드 삽입을 통한 공격에 쉽게 프로그램이 무너질 수 있고 이는 전체 시스템의 붕괴로 이어질 수 있다.
    그런데 W^X는 현대에 와서는 반드시 지켜지는 원리일까? 사실은 그렇지 않다. 왜냐하면 현대의 소프트웨어 보호 기술이 가장 기본적인 W^X 보호 기술의 원리에 위배되는 경우도 있기 때문이다. 
    [관련된 문서 - 핀툴 프로그래밍 기본서[제3부. 핀툴로 UPX 언패킹하기]]
    #이야기 #루니프 #핀 #핀툴 #W^X #섹션 #권한 #취약점 #해커 #개발자 #분석가 #코딩

    728x90
    반응형
Designed by Tistory.