Microsoft MVP성태의 닷넷 이야기
Windows: 27. 눈으로 확인해 보는 ASLR 기능 [링크 복사], [링크+제목 복사],
조회: 27807
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 7개 있습니다.)
(시리즈 글이 2개 있습니다.)
Windows: 27. 눈으로 확인해 보는 ASLR 기능
; https://www.sysnet.pe.kr/2/0/545

개발 환경 구성: 437. .NET EXE의 ASLR 기능을 끄는 방법
; https://www.sysnet.pe.kr/2/0/11862





눈으로 확인해 보는 ASLR 기능


비스타에는, 적어도 개발자 입장에서의 재미있는 기능들이 ^^ 한가득 있지요. 이번 토픽에서는, 그중에서 보안 강화를 위해 적용이 된 ASLR을 간단하게 테스트해 볼까 합니다. ASLR은 "Address Space Layout Randomization"의 약자인데, 단어에서 짐작할 수 있듯이 운영체제가 시작할 때마다 모듈들의 시작 주소가 다르게 지정이 되는 기능입니다. 이 기능으로 인해, 기존에는 고정된 주소를 기반으로 보안 헛점을 찾았던 모듈들이 비스타부터는 완전히 무력화될 수 있게 된 것입니다.

실제로 DLL/EXE의 로드 주소가 달라지는 지는 VS.NET의 Modules 창을 통해서도 확인이 가능하지만, 아래의 토픽에서 소개되는 간단한 콘솔 응용프로그램으로도 쉽게 확인해 볼 수 있습니다.

ASLR and the new linker
; https://learn.microsoft.com/en-us/archive/blogs/michael_howard/aslr-and-the-new-linker

위의 글은 토픽보다는 댓글에 소개되어진 코드가 재미있습니다.

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
  printf("main:\t\t0x%x\n", _tmain);
  getchar();
  return 0;
}

정말로 간단하지요. ^^ _tmain 함수의 시작 주소를 출력하는 것으로 ASLR 기능을 테스트하고 있습니다. 위의 프로그램을 기존 Windows XP/2000/2003에서 테스트해 보면 다음과 같은 고정된 출력 결과를 확인할 수 있습니다.

main:   0x41100f
main:   0x41100f
main:   0x41100f

하지만, Windows Vista에서 테스트 해보면 아래와 같이 가변적으로 바뀌는 것을 볼 수 있습니다.

main:   0x13c100f
main:   0xe5100f
main:   0x129100f

하다 보니 재미있습니다. ^^ 더욱 재미있는 것은, 그동안 해당 주소들이 부팅 시에만 새롭게 바뀐다고 생각했었는데, 해당 모듈의 폴더를 이동하거나, 삭제/복원 후 다시 실행하는 경우에도 Base Address 값이 달라지는 것도 확인할 수 있었습니다.



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 12/19/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2020-05-25 10시48분
리눅스 응용프로그램 실행 시 ASLR(Address Space Layout Randomization) 기능 끄고 실행하기
; https://kkamagui.tistory.com/905

$ sudo vi /etc/sysctl.d/01-disable-aslr.conf

kernel.randomize_va_space = 0

-----------------------------------------------

It rather involved being on the other side of the airtight hatchway: Defeating ASLR after you’ve gained RCE via ROP
; https://devblogs.microsoft.com/oldnewthing/20241024-00/?p=110417

A quick introduction to return address protection technologies
; https://devblogs.microsoft.com/oldnewthing/20241015-00/?p=110374
정성태

... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...
NoWriterDateCnt.TitleFile(s)
11745정성태10/15/201818258오류 유형: 495. TFS 파일/폴더 삭제 - The item [...] could not be found in your workspace, or you do not have permission to access it.
11744정성태10/15/201819949개발 환경 구성: 410. msbuild로 .pubxml 설정에 따른 배포 파일을 만드는 방법
11743정성태10/15/201821003웹: 37. Bootstrap의 dl/dt/dd 조합에서 문자열이 잘리지 않도록 CSS 설정
11742정성태10/15/201826284스크립트: 13. 윈도우 배치(Batch) 스크립트에서 날짜/시간 문자열을 구하는 방법
11741정성태10/15/201820618Phone: 13. Android - LinearLayout 간략 설명
11740정성태10/15/201821844사물인터넷: 51. Synology NAS(DS216+II)를 이용한 원격 컴퓨터의 전원 스위치 제어
11739정성태10/15/201823581Windows: 151. 윈도우 10의 전원 관리가 "균형 조정(Balanced)"으로 바뀌는 문제
11738정성태10/15/201822055오류 유형: 494. docker - 윈도우에서 실행 시 "unknown shorthand flag" 오류 [1]
11737정성태10/13/201818324오류 유형: 493. Azure Kudu - There are ... items in this directory, but maxViewItems is set to 299
11736정성태10/12/201819896오류 유형: 492. Visual Studio 로딩 시 오류 - The 'Scc Display Information' package did not load correctly.
11735정성태10/12/201825735VS.NET IDE: 129. Visual Studio - 특정 문자(열)를 개행 문자로 바꾸는 방법
11734정성태10/10/201819314Linux: 4. Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어파일 다운로드1
11733정성태10/10/201822769Linux: 3. Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어
11732정성태10/10/201822692디버깅 기술: 119. windbg 분석 사례 - 종료자(Finalizer)에서 예외가 발생한 경우 비정상 종료(Crash) 발생파일 다운로드1
11731정성태10/9/201821861개발 환경 구성: 409. C# - REST API를 이용해 Azure Kudu 서비스 이용 - 웹 앱 확장 처리파일 다운로드1
11730정성태10/9/201821302개발 환경 구성: 408. C# - REST API를 이용해 Azure Kudu 서비스 이용 - 파일 처리파일 다운로드1
11729정성태10/9/201823951Windows: 150. 윈도우에서 ARP Cache 목록 확인 및 삭제하는 방법
11728정성태10/9/201821639사물인터넷: 50. Audio Jack 커넥터의 IR 적외선 송신기 [1]
11727정성태10/8/201823015오류 유형: 491. Visual Studio의 리눅스 SSH 원격 연결 - "Connectivity Failure. Please make sure host name and port number are correct."
11726정성태10/7/201825620사물인터넷: 49. 라즈베리 파이를 이용해 원격 컴퓨터의 전원 스위치 제어파일 다운로드1
11724정성태10/5/201825527개발 환경 구성: 407. 유니코드와 한글 - "Hangul Compatibility Jamo"파일 다운로드1
11723정성태10/4/201818304개발 환경 구성: 406. "Docker for Windows" 컨테이너 내의 .NET Core 응용 프로그램에서 직렬 포트(Serial Port, COM Port) 사용 방법
11722정성태10/4/201822833.NET Framework: 798. C# - Hyper-V 가상 머신의 직렬 포트와 연결된 Named Pipe 간의 통신파일 다운로드1
11721정성태10/4/201823192.NET Framework: 797. Linux 환경의 .NET Core 응용 프로그램에서 직렬 포트(Serial Port, COM Port) 사용 방법파일 다운로드1
11720정성태10/4/201824702개발 환경 구성: 405. Hyper-V 가상 머신에서 직렬 포트(Serial Port, COM Port) 사용
11719정성태10/4/201825238.NET Framework: 796. C# - 인증서를 윈도우에 설치하는 방법
... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...