Information Security
Shell Code -버퍼 오버플로우 공격의 핵심은 오버플로우가 발생하는 버퍼에 저장되는 공격자의 코드로 실행 제어를 이동시키는 것이다. -사용자 명령어 라인의 해석기 Shell로 제어를 넘기고 공격당한 프로그램의 권한으로 시스템의 다른 프로그램에 접근하기 때문에 Shell code라고 부른다. 일단 /bin/sh 명령어를 실행하는 소스 코드를 작성했다. 메모리에 실행할 명령어만 올려야 하므로 data 세그먼트는 사용하지 않고 기계어로 변환해야 한다. text 세그먼트만 사용해서 어셈블리어로 작성했다. 실행 파일을 disassemble해서 기계어를 획득했다. 그런데 여기서 보이는 null 값(00)은 입력할 수 없는 값(bad character)이다. 1. 4바이트 레지스터 eax에 1바이트 값을 넣으면..
권한 상승 기법 -스택 버퍼 오버플로우 공격은 보통 SetUID(Set User ID)가 설정된 root 권한의 프로그램을 공격대상으로 한다. -> 스택에 정해진 버퍼보다 큰 공격 코드를 반환주소를 변경함으로써 임의의 공격 코드를 root 권한으로 실행하도록 한다. 권한 상승 기법을 공부하기 위해 OverTheWire의 Leviathan 문제를 풀어볼 것이다. 다음 레벨로 접속하는 패스워드를 찾아야 하고 /etc/leviathan_pass 디렉터리에 패스워드가 저장되어 있다. ★ leviathan1 leviathan1에 접속해서 파일 목록을 확인했더니 check 실행 파일이 존재한다. -> 특수 권한 SetUID가 설정되어 있다. 특수 권한에 의해 check 프로그램이 실행되는 중에는 소유자(leviat..
스택 버퍼 오버플로우(stack buffer overflow) -스택에 정해진 버퍼보다 큰 공격 코드를 삽입하여 반환 주소를 변경함으로써 임의의 공격 코드를 루트 권한으로 실행하도록 하는 방법이다. -취약한 함수 scanf, gets, strcpy, ... 등을 사용해서 발생하는 취약점이다. 1. 취약점 확인 - strcpy 함수 오버플로우 공격을 시도하기 위해서 취약한 코드를 작성 했다. strcpy(dest, src); strcpy 함수로 인해 입력받은 인자가 buffer2로 복사된다. 인자를 전달하면서 파일을 실행하면 buffer2의 값이 출력된다. 이번에는 길이가 긴 인자를 전달했다. -> 그랬더니 buffer1의 값이 출력되었다. ??? strcpy( buffer2, argv[1] ); 이 부분..