📌 RWX 메모리 생성이란?
RWX 메모리 생성이란, 메모리에서 읽기(Read), 쓰기(Write), 실행(Execute) 모두 가능한 영역을 만드는 것을 의미해.
➡️ 프로그램이 실행 중일 때, 코드(명령어)와 데이터를 저장하는 공간이 필요한데,
RWX 메모리를 사용하면 새로운 코드를 작성한 후 즉시 실행할 수 있어.
🔹 RWX 메모리 생성의 일상 예시
✅ 1️⃣ 프로그램이 스스로 새로운 기능을 추가하는 경우
📌 게임 업데이트 시스템
- 🎮 예시: 오버워치 같은 게임이 실행 중에 새로운 패치를 다운로드한 후, 즉시 적용(실행)
- 💻 컴퓨터 동작: 새로운 패치 파일을 메모리에 쓰기(Write) → 그리고 즉시 실행(Execute)
- ✅ 해결 방법: 게임 업데이트는 RWX 메모리를 생성해서 새 기능을 실행할 수도 있음.
✅ 2️⃣ 자바스크립트 엔진 (JIT, Just-In-Time 컴파일)
📌 웹 브라우저의 성능 최적화
- 🌐 예시: 크롬 브라우저에서 자바스크립트를 실행할 때, 자주 실행되는 코드를 컴파일하여 속도를 높임.
- 💻 컴퓨터 동작:
- 브라우저가 코드를 읽음. (Read)
- 코드를 최적화하여 메모리에 저장. (Write)
- 최적화된 코드를 즉시 실행. (Execute)
- ✅ 해결 방법: 크롬 브라우저의 자바스크립트 엔진도 RWX 메모리를 생성하여 실행 속도를 높일 수 있음.
✅ 3️⃣ 해킹 공격 (Exploit)
📌 쉘코드 실행
- 🔥 예시: 해커가 프로그램의 BOF(버퍼 오버플로우) 취약점을 이용하여, 악성 코드를 삽입하고 실행.
- 💻 컴퓨터 동작:
- 공격자가 쉘코드를 메모리에 쓰기(Write)
- 그 쉘코드를 즉시 실행(Execute)
- 🚨 보안 문제: 대부분의 보안 시스템에서는 RWX 메모리를 차단하여 공격을 막으려 함.
📌 RWX 메모리를 만드는 mprotect()와 mmap()
RWX 메모리는 운영체제(OS)가 기본적으로 허용하지 않음.
하지만, 프로세스가 특정한 API(mprotect() 또는 mmap())를 호출하면 RWX 메모리를 생성할 수 있어.
🔹 mmap() - 새로운 RWX 메모리 영역을 만드는 함수
📌 💡 mmap()을 쉽게 이해하기 위한 일상 예시
- 🗂️ 윈도우에서 "메모장"을 열어 새로운 파일을 만드는 것과 비슷함
- mmap()은 프로그램이 실행 중에 새로운 메모리 공간을 할당할 때 사용됨.
void *mem = mmap(NULL, 4096, PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
💻 설명:
- mmap(NULL, 4096, PROT_READ | PROT_WRITE | PROT_EXEC, ...)
- 4096 바이트(RWX) 메모리를 생성함.
- RWX 권한을 가지므로, 여기에 데이터를 쓰고 바로 실행 가능.
✅ 💡 일상 예시
- 새로운 노트를 만들고 (mmap()으로 메모리 할당)
- 연필로 글씨를 씀 (Write)
- 선생님이 그걸 읽고 발표함 (Execute)
🚨 보안 문제
- 악성 프로그램이 mmap()을 이용하면 메모리에 직접 쉘코드를 적고 실행할 수 있음.
🔹 mprotect() - 기존 메모리의 속성을 변경하는 함수
📌 💡 mprotect()를 쉽게 이해하기 위한 일상 예시
- 🏡 아파트에서 방의 용도를 변경하는 것과 비슷함
- 예전에는 창고(읽기/쓰기)였던 방을, 새롭게 **주방(읽기/쓰기/실행 가능)**으로 바꾸는 것.
mprotect(addr, 4096, PROT_READ | PROT_WRITE | PROT_EXEC);
💻 설명:
- mprotect()는 기존 메모리 영역을 RWX로 변경하는 함수.
- 특정 메모리 주소를 읽기(R), 쓰기(W), 실행(X) 가능하도록 설정.
✅ 💡 일상 예시
- 원래 "도서관"이었던 공간이 (읽기 전용)
- 사람들에게 "여기서 회의해도 됩니다!" 라고 알림 (RWX 변경)
- 이제 사람들이 회의도 하고 토론도 가능 (코드를 실행할 수 있게 됨)
🚨 보안 문제
- mprotect()를 통해 기존의 메모리를 RWX로 변경하면, 쉘코드를 실행할 수 있음.
- 따라서 많은 보안 시스템에서는 mprotect() 호출을 차단하거나 제한함.
📌 결론
📢 RWX 메모리는 읽기, 쓰기, 실행이 모두 가능한 위험한 메모리 영역
📢 JIT 컴파일러(크롬 브라우저), 게임 패치 시스템 같은 정당한 사용 사례도 있지만, 해커들이 악용할 가능성이 높음.
📢 mmap()은 새로운 RWX 메모리를 만들고, mprotect()는 기존 메모리의 속성을 변경함.
📢 Exploit을 시도할 때 mprotect()와 mmap()이 사용 가능한지 확인하면 RWX 메모리를 생성할 수 있음! 🚀
'Study > System' 카테고리의 다른 글
GOT(Global Offset Table) (0) | 2025.02.18 |
---|---|
보호 기법(Exploit Mitigation) (0) | 2025.02.18 |
BOF (버퍼 오버플로우, Buffer Overflow) (0) | 2025.02.18 |
OOB(Out of Bounds) (0) | 2025.02.18 |