SecuwaySSL U VPN 분석 - 1

predict-woo·2024년 5월 23일

SecuwaySSLVPN

목록 보기
2/2
post-thumbnail

이전 글에서 Secuway SSL VPN이 조금의 수정사항을 반영한 openvpn이라는걸 확인했다.

처음부터 나의 목표는 내 컴퓨터 비밀번호를 제공하지 않고 VPN에 연결할 수 있는 방법을 찾는 것이였기에, 이제 제대로된 분석을 통해 동작 방식을 파악하고, 이를 따라하는 것이 다음 단계이다.

다시 한번 언급하지만, 나는 이런 소프트웨어를 분석하는 방법을 제대로 공부한 적이 없는 초보 개발자이다. 아래 설명된 방법들은 나의 사고의 흐름이 향하는데로 시도해본 것이기에, 따라하는걸 추천하지 않는다.

오늘은 Secuway SSL VPN의 로그를 읽고, 큰 그림에서 어떻게 작동하는지 정도만 파악해볼 예정이다.

로그

대부분의 소프트웨어는 개발의 편의성을 위해 로그를 남긴다. 일반적인 경우에 중요한 정보가 담긴 로그들은 배포할 때 제거하지만, 대부분의 경우 개발자가 귀찮아서 걍 냅둔다.
Application Package Contents에 들어가서 ./MacVPNU 로 앱을 실행시켜보자. 다음 로그가 나온다.

내 비밀번호와 아이디로 접속을 한다.

겁나 긴 로그가 나온다. 터미널에서 읽기는 너무 길다. 파이프라인으로 텍스트 파일에 저장해준다.

로그가 무려 2000줄이 넘어간다. 다 읽으려니 머리가 아프다. 귀찮으니 그냥 다 Claude에게 넘겨주고 뭘하는건지를 물어보자.

3번과 4번, 5번이 아주 흥미롭다. 일단 우리가 알 수 있었던 것은, 로컬에 certification 파일과 key 파일들을 저장하는 단계가 있다는 것이다. 조금 더 분석 결과, /Users/Shared/SecuwaySSLU/ 아래에 파일들을 저장한다는 것을 알게 되었다. 하지만 이 path로 들어가도, 프로세스가 실행중인 상황에서도 아무런 파일도 보이지 않는다. 따라서 프로그램은 다음과 같은 단계를 따른다는 것을 추정해 볼 수 있다.

  1. 서버와 통신해서 crt, key 파일 다운로드
  2. config 파일 생성
  3. openvpn 시작
  4. 모든 파일 삭제

그러면 어떻게 중간에 파일들을 낚아챌 수 있을까?

Config 분석

조금 더 효율적인 방법이 있을 것 같기는 하지만, 귀찮으니 그냥 cp를 loop으로 돌리자.

SOURCE_DIR=/Users/Shared/SecuwaySSLU
DESTINATION_DIR=conf


while true; do
    cp -r "$SOURCE_DIR"/* "$DESTINATION_DIR"
done

이 상태에서 VPN에 연결을 하면, 몇가지 파일들이 복사되는 것을 확인 할 수 있다.

> ls
ca.crt      client.conf client.crt  client.key  client.log  start.sh

하나씩 읽어보자.
먼저 ca.crt, client.conf, client.crt, client.key 는 모두 base64로 인코딩된 암호화된 파일이다.

client.log 는 openvpn의 로그이다.

start.sh 는 openvpn을 시작하는 스크립트다.

echo '내 컴퓨터 비밀번호' | sudo -S DYLD_LIBRARY_PATH=/Applications/SecuwaySSL\ U\ V2.0.app/Contents/Resources /Applications/SecuwaySSL\ U\ V2.0.app/Contents/Resources/ssl_client --encrypt_config --config /Users/Shared/SecuwaySSLU/client.conf &

여기에 내 컴퓨터 비밀번호가 그대로 들어간다. 누가 이 파일 읽는 스크립트만 만들어서 내 컴에 실행시키는데 성공하면 망한다는 말이다. 살짝 어지럽지만 계속 읽어보자. 결국 이 스크립트가 하는건, conf 파일로 openvpn을 시작하는 것이다.

여기에 일반적인 openvpn에는 없는 옵션이 있는데, 바로 --encrypt-config 이다. 일반적인 openvpn에서는 암호화되어 있으면 안되는 ca.crt, client.conf, client.crt, client.key 이 암호화 되어있는걸 보니, 이를 복호화해서 읽는 옵션으로 추정된다.

일단 내가 조금 더 깊은 분석 없이, 간단한 로그분석 만으로 할 수 있는건 여기까지다. 다음에는 ssl proxy를 사용해서 Secuway SSL VPN이 날리는 API 콜들을 분석해볼 예정이다.

2024.07.26 수정

학교에서 root 비밀번호 입력 필요없이 연결할 수 있는 업데이트가 8월 중순에 나온다는 답변을 받았기에, 이 시리즈는 여기서 멈추려고 한다.

profile
학생 개발자

0개의 댓글