반응형

dream hack 2

[ 시스템 해킹 ] Memory Corruption : Out of Bounds

같은 자료형의 변수나 객체를 여러 개 관리해야 하면, 이들을 요소로 하는 배열을 선언하여 사용한다. 배열은 같은 자료형의 요소(Element)들로 이루어져 있는데, 각 요소의 위치를 인덱스(Index)라고 한다. Out of Bounds (OOB)는 배열의 임의 인덱스에 접근할 수 있는 취약점이다. 배열은 연속된 메모리 공간을 점유하며, 크기는 요소의 개수와 요소 자료형의 크기를 곱한 값이 된다. 배열 각 요소의 주소는 배열의 주소, 요소의 인덱스, 요소 자료형의 크기를 이용하여 계산된다. 1. Out of Bounds OOB는 요소를 참조할 때, 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생한다. 개발자가 인덱스의 범위에 대한 검사를 명시적으로 프로그래밍하지 않으면, 프로세스는 앞서 배운 식을 ..

[ 시스템 해킹 ] Background : RELRO

1. RELRO 함수가 처음 호출될 때 함수의 주소를 구하고, 이를 GOT에 적기 위해서는 GOT 테이블을 업데이트할 수 있어야 하므로 GOT에 쓰기 권한이 부여된다. 그런데 이는 바이너리를 취약하게 만드는 원인이 됩니다. 또한, ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 이 영역들은 프로세스의 시작과 종료에 실행할 함수들의 주소를 저장하고 있는데, 여기에 임의로 값을 쓸 수 있다면, 프로세스의 실행 흐름이 조작될 수 있다. 리눅스 개발자들은 이러한 문제를 해결하고자 프로세스의 데이터 세그먼트를 보호하는 RELocation Read-Only(RELRO)을 개발했다. RELRO는 쓰기 권한이 불필요한 데이터 세그먼트에 쓰기 권한을 ..

반응형