나는이 이론을 들었다. 주소 공간 위치 무작위 화는 라이브러리를 가져 와서 가상 주소 공간의 임의의 위치에서로드하므로 해커가 프로그램에서 구멍을 발견 한 경우 return-to-libc 공격을 실행하기 위해 미리 알려진 주소를 갖지 않습니다 예를 들어 그러나 몇 초 동안 생각한 후에는 방어적인 수단으로는 아무런 의미가 없습니다.ASLR은 어떻게 효과적 일 수 있습니까?
가상의 TargetLib (libc 또는 해커가 찾고있는 다른 모든 것)가 결정적인 것 대신 임의의 주소에로드되었다고 가정 해 보겠습니다. 이제 해커는 TargetLib과 그 내부의 루틴이 어디에 있는지 미리 알지 못하지만, 애플리케이션 코드도 마찬가지입니다. TargetLib 내부에서 루틴을 찾으려면 바이너리 어딘가에 조회 테이블이 있어야하며 결정적인 위치에 있어야합니다. (또는 다른 곳이 가리키는 임의의 위치에서 원하는만큼의 방향을 추가 할 수 있지만 결국 알려진 위치에서 시작해야합니다.)
즉, 공격 코드를 TargetLib의 알려진 위치에서 해커는 응용 프로그램의 조회 테이블에서 TargetLib에 대한 공격 코드를 가리키고 포인터를 대상 루틴에 참조하고 공격이 방해받지 않고 진행됩니다.
ASLR이 작동하지 않는 방식에 대해 알고 있습니까? 기술 된 바와 같이, 나는 그것이 보안 문제의 이미지를 제공하지만 실제적인 내용은 제공하지 않고 속도 위반보다 더 많은 것을 보지 못하기 때문입니다. 내가 놓친 게 있니?
ASM 레벨에서 Windows EXE를 디버깅 한 적이 있습니까? 거기에 진짜 수입 표가 있습니다. 로더는 코드 (코드가 일부 외부 루틴을 호출 할 수있는 모든 장소)를 패치하지 않습니다. 기본적으로 컴파일러에서 CALL을 생성하는 긴 순서의 JMP 명령어 인 가져 오기 테이블을 패치합니다. –
그 공유 메모리뿐만 아니라 ... – rook
@Mason Wheeler - 오랫동안 아니지만, 알아두면 좋습니다. 그렇게하면 특정 주소를 쉽게 결정할 수 있지만 그물 효과는 동일하지 않습니까? 그것은 알려지지 않은 것으로 알려지기 때문에 단순히 공격을 더 어렵게 만듭니다. –