넷사랑 사의 XFTP Client에서 발생하는 버퍼 오버플로우 취약점을 해결한 보안 업데이트 발표했다. 영향 받는 버전을 사용 중인 이용자는 해결방안을 참고하여 최신버전으로 업데이트 하기를 권고했다. XFTP Client에서 공격자가 제어 가능한 FTP 서버의 파일을 다운로드할 때 파일명을 복사하는 과정에서 버퍼 오버플로우가 발생하여 임의 코드를 실행할 수 있다.
XFTP
Xftp 개념
Xftp는 넷사랑 컴퓨터에서 개발한 파일 전송 클라이언트로 FTP와 SSH의 확장 기능인 SFTP 프로토콜을 지원한다. 윈도우즈 탐색기와 거의 유사한 구조로 설계 되어있고 탭 기반 인터페이스를 갖고 있어서 사용하기가 용이하다. 간결하고 직관적인 인터페이스로 기본적인 파일 전송과 관리가 가능하여 접근성이 좋다.
Xftp 기능
XFTP는 파일전송 프로토콜(FTP, SFTP)을 지원한다. FTP는 TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 위한 프로토콜이다. SFTP는 SSH처럼 전송 시 암호화시켜서 전송하게 되는데 파일을 전송할 때 FTP처럼 암호화 시켜서 전송한다. XFTP는 SSH의 특수 사용자 인증을 지원한다. 또한 별도의 세션파일을 생성하여 세션 관리가 가능하다.
버퍼 오버플로우
메모리를 다루는데 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 보안과 프로그래밍에서는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것을 의미한다. 벗어난 데이터는 인접 메모리를 덮어쓰게 되며 이때 다른 데이터가 포함되어 있을 수도 있는데, 손상을 받을 수 있는 데이터는 프로그램 변수와 프로그램 흐름 제어 데이터도 포함된다. 이로 인해 잘못된 프로그램 거동이 나타날 수 있고 메모리 접근 오류, 잘못된 결과, 프로그램 종료, 시스템 보안 누설이 발생할 수 있다.
버퍼 오버플로우는 보통 데이터를 저장하는 과정에서 데이터를 저장할 메모리 위치가 유효한지를 검사하지 않아서 발생한다. 이런 경우, 데이터가 담긴 위치 근처에 있는 값이 손상되고 그 손상이 프로그램에 영향을 미칠 수 있다. 악의적인 공격으로 취약점이 반복할 수 있다.
버퍼플로우 취약점을 이용하는 기술은 스택 기반으로 이용되거나 힙 기반으로 이용된다.
스택 기반의 예시를 간단히 c언어로 살펴보자
스택 영역에 있어야 할 지역 변수의 배열 크기가 100만을 넘는다.
그러면
이렇게 segmentation fault가 난다.
XFTP Client 6.0149 및 이전버전에서 영향을 끼쳤으며 6.0150 이상 버전으로 업데이트를 적용해야 했다.
2021년 현재 업데이트는 Xftp 7까지 업데이트 되어있다.
업데이트는 다음과 같이 시행되었는데, 실질적으로 어떻게 버퍼 오버플로우를 대처하는지 궁금하여 방어 대책을 찾아보았다.
버퍼 오버플로우 대응 방안
1. 올바른 개발
strcpy 함수 사용 시에는 버퍼 크기를 전달받지 않아서 버퍼오버플로우가 발생할 가능성이 높다. 오류 검사를 제대로 개발자들이 수행하지 않기도 한다. 왜냐하면 개발자들이 메모리를 할당하면서 이정도면 충분하겠지, 라는 안일한 가정을 하며 피해를 불러올 수 있다.
2. 프로그램의 보안패치를 충실히 하는 것이다. 위의 예시처럼 문제를 발견하기 전에 꾸준히 업데이트를 해줄 필요가 있다. 소프트웨어 사용 시 업데이트를 꾸준히 실행하여, BOF(버퍼 오버플로우)의 가능성을 사전에 방지하는 것이 중요하다.
3. Non-executable stack : 스택에서 execution 권한을 제거해서 스택에 로드된 공격자의 코드가 실행될 수 없도록 하는 것이다.
4. Canary-based defense : 컴파일러가 프로그램의 함수 호출 시에 ret address 앞에 canary 값을 주입하여, 종료 시 canary 값이 변조되었는지 확인해서 버퍼 오버플로우 공격인지 탐지하는 것이다.
카나리는 버퍼오버플로를 감시하기 위해 스택의 버퍼와 제어 데이터 사이에 위치한 값이다. 버퍼가 오버플로하면 오염될 첫 데이터가 될 것이고 카나리값의 검증이 실패하여 오버플로에 대한 경고가 발생하며 이후 처리될 수 있다.
5. Stack shield : 함수 호출시 ret을 Global RET Stack이라는 특수 스택에 저장하고, 함수 종료시 Gloval RET Stack에 저장된 ret값과 stack의 ret값을 비교해서 다르면 프로그램을 종료시키는 방식이다.
6. ASLR : 메모리 공격을 방어하기 위해 주소공간배치를 난수화하는 기법, 스택, 힙, 라이브러리 등 데이터 영역 주소 등을 난수화하여 주소공간에 배치하는 방식이다.
'HACKING > SYSTEM' 카테고리의 다른 글
Buffer Overflow 취약점 (BOF) _ 지역변수를 임의의 값으로 overwrite (0) | 2021.09.25 |
---|---|
Buffer Overflow 취약점 (BOF) _ memory leak (0) | 2021.09.24 |
pwntools 기본 명령어 (0) | 2021.09.24 |
어셈블리 핸드레이 2 (0) | 2021.09.07 |
어셈블리 핸드레이 1 (0) | 2021.09.07 |