취약점

1. 사용자가 없는 파일은 관리가 되지 않아 공격자의 도구로 사용될 수 있다. 따라서 NOUSER 파일은 삭제해주자!

2. 시스템의 중요 파일의 권한 관리가 미비할 경우 내부 자원의 유출 및 변조와 서비스 오작동을 초래할 수 있다.

 

보안조치

사용자가 없는 파일은 지워준다.

#find / -nouser -exec rm {} \;
#find / -nogroup -exec rm {} \;

 

/etc/passwd파일의 소유자가 관리자인 것과 권한이 644로 설정되어있는지 확인한다.

"/etc/passwd" 파일의 변조가 가능할 경우 shell변조, 사용자 추가/삭제, root 권한 획득이 가능함

[root@localhost ~]# ls -la /etc/passwd 
-rw-r--r--. 1 root root 2456  1월  5 23:41 /etc/passwd

 

■ /etc/shadow 파일의 소유자가 관리자인 것과 오직 읽기 권한만 할당되어있는지 확인한다.

"/etc/shadow" 파일은 시스템 모든 계정의 암호화된 패스워드가 저장된 파일이다. 따라서 관리자만이 열람할 수 있도록 한다.

[root@localhost ~]# ls -la /etc/shadow
-r--------. 1 root root 1501  1월  5 23:41 /etc/shadow

 

"/etc/hosts" 파일의 소유자가 관리자인 것과 권한이 600인지 확인한다.

"/etc/hosts" 파일은 웹페이지의 IP주소를 찾을 때 사용되며 DNS 서버보다 우선한다. 이 파일이 변조되면 악성 사이트로 접속되는 파밍 공격 등에 악용될 수 있다.

[root@localhost ~]# ls -la /etc/hosts
-rw-------. 1 root root 158  6월  7  2013 /etc/hosts

 

"/etc/(x)inetd.conf" 파일의 소유자가 관리자인 것과 권한이 600인지 확인한다.

위 파일은 슈퍼데몬 설정 파일로써, 비인가자에게 쓰기 권한이 부여되어있을 경우 root권한으로 불법적인 서비스를 실행할 수 있다.

[root@localhost ~]# ls -la /etc/xinetd.conf 
-rw-------. 1 root root 1001  4월  1  2020 /etc/xinetd.conf

 

"/etc/syslog.conf" 파일의 소유자가 관리자인 것과 권한이 644인지 확인한다.

위 파일은 syslog데몬의 설정 파일로서, 공격자는 파일 변조를 통해 흔적 또는 시스템 오류 사항을 분석하기 어렵게 할 수 있다.

[root@localhost ~]# ls -la /etc/rsyslog.conf 
-rw-r--r--. 1 root root 3232  9월 30 22:19 /etc/rsyslog.conf

 

"/etc/services" 파일의 소유자가 관리자인 것과 권한이 644인지 확인한다.

위 파일은 시스템 내의 모든 서비스에 매칭 되는 포트번호를 정의하는 파일이다. 공격자는 운영 포트 번호를 변경하여 정상적인 서비스를 제한하거나 허용되지 않은 포트를 열어 악성 서비스를 의도적으로 실행할 수 있다.

[root@localhost ~]# ls -la /etc/services 
-rw-r--r--. 1 root root 670293  6월  7  2013 /etc/services

 

 

마무리

위 파일들이 보편적인 설정 파일인 만큼 공격의 노출도 또한 높다. 따라서 권한 관리를 잘해줘야 한다.

 

dreamhack.io/wargame/challenges/17/

 

rev-basic-3

Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

참이면 "Correct"를 반대면 "Wrong"을 반환한다고 한다.

 

◾ 일단 실행부터 해보자

키값 인증 문제다, 여기서 알 수 있는 것은 비교문이 쓰일 것!

 

 

 프로그램 정보 확인

컴파일러 종류가 어셈블러이고 코드가 직관적일 것으로 보임

 

◾ 문자열 검색을 통해 메인 함수를 찾아보자

 

Correct로 가기 위해 점프 문(노란색)에서 wrong으로 분기되지 않게 한다.

그 말은 즉슨 바로 위의 함수의 반환 값이 1이 되어야 함을 뜻한다(0일 때, ZF=1 따라서 wrong으로 분기됨) 

함수로 들어가 보자!

 

◾ 네, 24번 반복하는데 조건이 있겠죠? 살펴보죠

 

◾ 저는 "pingu"라고 입력했고, 3000 주소(노란색)에는 I`gtcgBf..... 값이 들어있네요.

두 값을 비교할 텐데 한 바이트씩 가져와서 비교할 예정입니다. 자세히 보면 그냥 비교하지 않죠?

xor와 +연산을 수행한 결과를 비교합니다.

 

 

 첫 번째 반복문에서 i=0, rsp에 저장됨

1) ecx = "p"

2) p xor 0

3) edx = 0

3) ecx = ("p"+0)

최종 ecx값을 기존 문자열에 첫 문자 I와 비교합니다

다른 문자다 그럼 for문을 빠져나가고 동일 문자이면 다음 반복문을 수행합니다~

 

 두 번째 반복문에서 i=1

1) ecx = "i"

2) p xor 1

3) edx = 1

3) ecx = ("i"+2)

총 24번 반복합니다

 

input을 I라고 입력해보니 동일한 문자라고 하네요 반복문 수행~

나머지 값들도 xor, +연산 조건을 충족하게 만들어봅시다.

 

#include "stdio.h"

int main(int argc, char* argv[])
{
	//I`gtcgBf.xii{.m.h...M¥.E의 아스키코드값
	int arry[24] = { 73, 96, 103, 116, 99, 103, 66, 102, 128, 120, 105, 105, 123, 153, 109, 136, 104, 148, 159, 141, 77, 165, 157, 69 };

	for (int i = 0; i < 24; i++) {	//24번 반복
		for (int n = 0; n < 128; n++) {	//아스키코드 0~127 중 조건에 맞는 값 찾기
			if ( (n xor i) + 2*i == arry[i]) {
				printf("Hex : %x\tDex : %d\tAski : %c\n", n, n, n);
				//printf("%c",n); //한줄로
				break;
			}
		}
	}
	return 0;
}

 

 

 

◾ 결괏값을 넣어보니 최초의 목적이었던 함수 반환 값이 1이 되었고 따라서 ZF에 0이 세팅되었습니다.

Correct로 진입 성공!

 

 

 

마무리

이번 예제를 통해 xor연산 방식과 for문에서 i가 어셈블리어에서 어떻게 구현되는지 알 수 있었습니다 :)

 

취약점

관리자가 명령어(예: ls, mv, cp등)를 수행했을 때 root 계정의 PATH 환경변수에 "." (현재 디렉터리 지칭)이 포함되어 있으면 현재 디렉터리에 명령어와 같은 이름의 악성파일이 실행되어 악의적인 행위가 일어날 수 있음

 

직접해보기

 

기존 환경변수 내용 확인

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

 

실습을 위해 "." 추가!

[root@localhost ~]# vi /etc/profile
...
export PATH=.:$PATH
...
[root@localhost ~]# source /etc/profile

 

변경된 환경변수 확인

[root@localhost ~]# echo $PATH
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

 

 

 

다음과 같이 c프로그램을 짜고 ls라는 이름으로 컴파일!

 

root는 ls를 입력하였으나 환경변수에 .이 선행하므로 공격자가 만들어 놓은 ls명령어를 수행

 

결과

hack파일이 setuid설정을 받아 실행시 root의 권한을 이용할수있게됨

 

 

보안조치

root 계정의 환경변수 설정파일("/.profile", "/.cshrc" 등)과 "/etc/profile" 등에서 PATH 환경변수에 포함되어 있는 현재 디렉터리를 나타내는 "."을 PATH 환경변수의 마지막으로 이동 "/etc/profile", root 계정의 환경변수 파일, 일반계정의 환경변수 파일을 순차적으로 검색하여 확인

 

+ Recent posts