XSS란XSS, 크로스 사이트 스크립팅은 사이트 간 스크립팅이라는 이름의 웹 취약점 공격이다.웹 사이트의 관리자 혹은 허용된 권한이 아닌 악의적인 목적의 사용자가악성 스크립트를 삽입하거나 저장시켜 의도하지 않은 명령을 수행하도록 만드는 특징을 가지고 있다. XSS 공격을 통해 발생할 수 있는 공격은 다음 등이 있다. 1. 쿠키 및 세션 정보 탈취: XSS에 취약한 웹 게시판 등에 쿠키나 세션 정보를 탈취할 수 있는 document.cookie 등의 구문을삽입하여 해당 게시글을 열람하는 사용자의 정보를 가져가거나 탈취할 수 있다. 2. 악성 프로그램 다운 유도: 악성 스크립트를 활용하여 악성 프로그램을 다운받는 사이트로 리다이렉트 시키는 등의공격을 수행하여 악성 프로그램을 ..
더보기 출처: https://dreamhack.io/lecture/roadmaps/2 ✔️ ptmalloc2 메모리의 낭비 없이 이루어지도록 특수한 알고리즘으로 구현된 것이 운영체제의 Memory Allocator이다. 리눅스에서는 ptmalloc2, 구글은 tcmalloc, 페이스북이나 파이어폭스는 jemalloc을 사용한다. 이 중에서 ptmalloc2는 메모리가 해제되면, 해제된 메모리 특징을 기억하고 있다가 비슷한 메모리의 할당 요청이 발생하면 이를 빠르게 반환해준다. 이러한 ptmalloc2는 메모리 낭비 방지, 빠른 메모리 재사용, 메모리 단편화 방지를 위해서 사용하며 메모리의 효율적인 관리를 위해서 사용한다. 이 중에서 메모리 단편화 방지를 위해 ptmalloc은 정렬과 병헙과 분할을 사용하..
더보기 출처: https://dreamhack.io/lecture/roadmaps/2 ✔️ Use After Free ptmalloc2를 이용해서 메모리를 관리할 때 권한 회수를 하지 못해서 발생하는 비슷한 문제가 발생하게 되는데, Use After Free는 메모리 참조에 사용한 포인터를 메모리 해제 후에 적절히 초기화하지 않거나 해제한 메모리를 초기화하지 않은 채 다음 청크에 재할당해주면서 발생하는 취약점이다. 컴퓨터 과학에서 Dangling Pointer는 유효하지 않은 메모리 영역을 가리키는 포인터를 말한다. 일반적으로 포인터를 선언하고 그 포인터에 malloc 함수가 할당한 메모리 주소를 저장한다음 해당 포인터를 참조해 할당한 메모리에 접근한다. 메모리 해제는 free 함수를 호출한다. 근데 f..
더보기 출처: https://dreamhack.io/lecture/roadmaps/2 ✔️ Format String Bug C언어의 다양한 문자열 출력 write, puts, printf 등의 함수가 있는데, 그 중에서 printf는 포맷 스트링(Format String)을 이용해서 다양한 형태로 값을 출력한다. C언어에는 printf외에도 scanf, fprintf, fscanf, spritnf, sscanf 등이 포맷 스트링을 인자로 사용하는데, 함수 이름이 f로 끝나고 문자열을 다루면 포맷 스트링을 사용할 것이라고 추측해볼 수 있다. 이 함수들은 포맷 스트링을 채울 값을 레지스터나 스택에서 가져오게 되는데, 이들 내부에 포맷 스트링이 필요로 하는 인자의 개수와 함수에 전달된 인자의 개수를 비교하는 ..
더보기 출처: https://dreamhack.io/lecture/roadmaps/2 ✔️ Out of bounds 프로그램에서는 배열을 선언하여 사용하는데, 배열은 같은 자료형의 요소(Element)들로 이루어져있고 각 요소의 위치를 인덱스(Index)라고 한다. 코드를 구성할 때 발생하는 실수 혹은 인덱스를 벗어나 참조해도 경고를 띄워주지 않는 컴파일러 등에 의해 취약점의 원인이 될 수 있고, 이러한 것을 배열의 임의 인덱스에 접근한다는 Out of Bounds(OOB)라고 한다. 배열은 연속된 메모리 공간을 차지하고 있고, 해당 공간의 크기는 요소의 개수와 자료형의 크기를 곱한 값이 된다. 이러한 배열의 요소 개수를 배열의 길이(Length)라고 한다. 배열의 각 요소의 주소는 배열의 주소와 요소의..
더보기 출처: https://dreamhack.io/lecture/roadmaps/2 ✔️ Bypass RELRO 저번 시간에 함수가 처음 호출될 때 함수의 주소를 구하고, 이를 got에 적는 Lazy Binding을 봤었는데 바이너리의 실행 중 got 테이블을 업데이트할 수 있어야 하므로 got에 쓰기 권한이 부여됐다. 이러한 내용은 바이너리를 취약하게 만드는 원인이 되는데, 이에 더해 elf의 데이터 세그먼트에 프로세스 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 해당하는곳을 조작하여 프로세스 흐름을 바꿀 수 있다. 이러한 문제를 해결하고자 프로세스의 데이터 세그먼트를 보호하는 RELocation Read-Only(RELRO)가 나오게 되었는데, RELRO란 쓰기 권..