응용프로그램을 디버깅하다보면 항상 고정된 위치에 응용프로그램이 로딩되어야 할 필요가 있는데요, 최신의 리눅스에는 해킹 방지를 위해 ASLR(Address Space Layout Randomization) 기능이 활성화되어 있어서 실행할 때마다 항상 다른 위치에 응용프로그램이 로딩됩니다. ㅠㅠ 좋은 기능이긴 한데... 디버깅시에는 크게 도움이 안되지요. ㅠㅠ

이 기능을 비활성화하려면 다음과 같이 파일을 추가하면 됩니다.

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

kernel.randomize_va_space = 0

아우 디버깅이 빨리 끝나야할텐데... 걱정이네요. ㅠㅠ

그럼 좋은 밤 되세요. ^^

요즘 나오는 리눅스들은 기본적으로 ASLR(Address Space Randomization) 옵션이 켜져있는데요, 이 옵션이 켜지면 프로세스가 실행될 때마다 로딩되는 주소가 바뀌게 됩니다. 크래커들의 공격을 막기위해 들어간 기능인데요, 만든 프로그램을 디버깅할 때는 오히려 불편하더라구요. 그래서 ASLR을 끄는 방법을 찾아봤더니 의외로 간단했습니다.

echo 0 > /proc/sys/kernel/randomize_va_space

콘솔에서 위의 명령을 입력하면 즉시 ASLR 옵션이 비활성화됩니다. 활성화하려면 0을 1로 바꿔주면 되겠지요. ^^)/~

그럼 좋은 하루 되세요 ^^

간만에 재미있는 질문을 받았습니다. 보안 관련 기술 쪽에 ASLR(Address Space Layout Randomization) 기법이 있는데, 이를 어떻게 MNIT64 OS에 적용할 수 있을까를 묻는 내용이었습니다.

저도 보안 쪽은 좀 생소하여 ASLR을 잠시 찾아봤는데, 응용프로그램을 로딩할 때 항상 정해진 어드레스가 아닌 매번 다른 어드레스로 로딩하여 크래커로부터 보호하는 기법이더군요. 사실 어드레스를 매번 변경한다고 해도 찾아서 뚫을려고 마음 먹으면 어쩔 수 없기 때문에 완벽한 방법은 아닙니다만, 나름대로 괜찮은 아이디어라는 생각이 들었습니다.

그래서, 어떻게 하면 MINT64 OS에도 이를 적용할 수 있을까 생각을 해봤는데 의외로 답은 간단했습니다. ^^;;; MINT64 OS는 응용프로그램을 메모리에 로딩할 때 동적 메모리 관리 모듈에서 먼저 메모리를 할당 받은 뒤에 그 메모리에 올려서 응용프로그램을 동작시킵니다. 따라서, 많은 응용프로그램이 실행되고 종료되는 상황이라면, 저절로 어드레스가 랜덤하게 할당되는 것이지요.

물론, 응용프로그램 하나만 계속 생성되었다가 종료되는 상황이라면 여전히 문제가 있습니다. 이 문제도 사실은 간단히 해결할 수 있습니다. 동적 메모리 관리 모듈에서 메모리를 할당받을 때, 메모리 블록을 항상 인덱스 0번부터 검색할 것이 아니라 랜덤한 인덱스부터 검색하도록 하면 됩니다. ^^;;; 나중에 여유가되면 한번 기능을 추가해봐야겠군요. ^^)/~

그럼 즐거운 밤 되세요 ;)

+ Recent posts