2018년 3월 6일 화요일

https://www.exploit-db.com/exploits/44245/ 취약점은 넷기어 제품에서 발생한 취약점으로 매직 패킷을 통해서 TelnetEnable이 활성화 되어 루트 권한으로 제품군에 접속이 가능한 취약점입니다. 해당 취약점의 매직 패킷은 블루피시 암호화를 사용합니다.

x90c

커널 해킹을 전문으로 하는 커널 해커 x90c 입니다.
리눅스 커널 취약점 공격 코드를 많이 실행해 보았고 루트쉘을 많이 따 보았습니다.
예전부터 리눅스 커널 공격 코드에 관심이 많았구요. 분석은 깊이는 아니지만 해 본 적이 있습니다.

x90c


[x90c와 해킹]
필자는 해킹을 1998년도부터 익혀서 학습하기 시작 하였고 2002년도에 와우 해커 오버헤드 스터디 그룹 소수 정예 멤버로 들어가면서 국내
언더그라운드 해커 진영에 알려지게 되었다.
해킹이란 창의적인 아이디어로 피해 시스템을 조사하여 침입하고 공격하며 방어하는 아이디어까지 구현하는 그런 능력을 의미한다.
따라서 해킹은 원래 간단하지 않지만 시스템 해킹 중에도 간단한 것은 매우 간단한 편이라 많은 해커들이 생기는 효과가 있다.

[버퍼 오버플로우]
버퍼 오버플로우는 C언어로 작성된 배열 변수가 스택 메모리를 사용할 때 버퍼에 문자열을 복사하는 함수인 strcpy strcat 함수 등을
통해 긴 버퍼가 작은 버퍼에 복사되는 경우 버퍼를 넘어서 RET 영역인 리턴 주소 영역을 덮어쓸 수 있음으로써 해커가 원하는 값을
덮어써서 프로세서인 CPU의 실행 흐름을 바꿔 공격 코드를 실행해 권한 상승된 루트쉘을 획득하는 공격 기법이다.
------------------------------------------
                       SFP | RET
     AAAAAAAAAAAAAAAAAAAAAAA 공격 코드 주소 4바이트
------------------------------------------
위와 같이 덮어쓰기에 성공하면 공격 코드인 즉 쉘코드를 실행하게 된다.
쉘코드는 루트쉘이 뜨게 한다.
구버전에서는 setreuid 등의 도움이 필요 없는 쉘코드들이 동작했지만 요즘 배포판들에서는 setreuid 등으로 권한을 조정하는
함수를 포함한 쉘코드를 위치시켜야 권한 상승된 루트쉘을 획득할 수 있고 그렇지 않은 경우 루트쉘이 뜨지 않을 것이다.
간략히 버퍼 오버플로우에 대해 설명해 보았다.
자세한 질문은 x90chacker@gmail.com로 문의하면 기본적인 설명에 대해서 알려드릴 것이다.
이만. 20000....

[포맷 스트링 버그]
포맷 스트링 버그는 printf 함수가 포맷 인자를 쓰는데 %n %hn의 %n 계열 포맷 인자가 특정 메모리를 변조하는 기능이 가능함으로써
공격 기법을 통해 원하는 위치의 메모리 바이트를 원하는 값을 덮어씌워 바꿀 수 있어 CPU의 실행 흐름을 변조해 루트쉘을 획득하는 것이
가능한 공격 기법으로 버퍼 오버플로우보다는 공격 기법이 어렵고 약간의 버퍼와 관련된 계산이 요구되는 기법이다.
버퍼의 출력 길이를 이용해 원하는 위치를 정하는 메모리 주소를 2바이트씩 끊어서 계산되도록 해야 하기 때문이다.
이렇게 계산된 버퍼 출력 길이가 2바이트씩 메모리를 덮어쓸 위치 주소로 사용되기 때문이다.
그럼 이만 .....

[NULL Pointer dererfence]
널 포인터 역참조 취약점은 리눅스 커널 취약점으로 커널 계열에서 발생하며 mmap 함수로 널 포인터 지역인 0x0 지역에 메모리를 맵핑해서
커널이 널 포인터 함수 포인터를 통해 호출하는 경우 해당 지역에 위치시킨 해커의 커널 쉘코드가 실행되도록 하는 비교적 이해가 단순한
자주 발생하는 취약점이다.
이만....

[결론]
버퍼 오버플로우, 포맷 스트링 버그, 널 포인터 역참조 취약점에 대해서 설명 해 보았다.
이상 자세한 기본적인 이해를 원한다면 메일을 주길 바란다.
최대한 기본적이고 개괄적인 이해를 제공할 예정이다.
x90c

리눅스 커널 취약점은 권한 상승, 메모리 릭 두 가지로 분류할 수 있다.

권한 상승 공격 코드가 아주 많이 보고 되어 있으며 공개된 익스플로잇을 활용해 쉽게 공격에 성공해 루트쉘을 로컬 사용자가 획득 할 수 있다.

메모리 릭을 통해서는 커널 메모리의 중요한 내용을 캡쳐해서 필요한 데이터를 추출해 공격에 활용할 수 있다.

이렇게 리눅스 커널 공격 코드는 두 가지로 분류된다.


공격 코드 (exploit code)의 분류

공격 코드는 메타스플로잇 모듈, C, 파이썬 코드, C++, 또는 어셈블리로 된 코드가 있을 수 있습니다. 해커는 이런 프로그래밍 언어를 익혀야 코드를 분석하거나 테스트할 수 있죠.

edb (exploit-db.com) 사이트에서 올라오는 공격 코드들을 봐도 알 수 있죠.

x90c

2018년 3월 5일 월요일

[개념] 프로그램 코드 분석 ( Program code analysis )


C언어로 된 소스 코드를 분석하는 일은 단순히 분석이 될 수도 있고 가치 있는 아키텍처 정보를 추출하거나 보안과 관련된 아이디어를 도출 할 수 있는 방법이 되기도 한다.

리눅스 커널 소스 코드 분석


보고된 취약점을 분석하는 방식으로 학습하는 것이 좋고
신규 취약점은 찾기가 매우 어렵고 보고 빈도수를 보면 알 수 있듯이 제로데이 연구는 도구 없이 수행이 어려운 부분이다. (보안 분석 방향)