데프콘 : GPKI 패스워드 크랙

데프콘 : GPKI 패스워드 크랙
[이미지: AI Generated by TheTechEdge]
💡
Editor Pick
- GPKI 패스워드 크랙시도가 있었던 흔적
- GPKI 패스워드 크랙을 성공했을 가능성도 있으므로 검증 필요
- 상세 분석 자료는 별도의 자료로 공개 예정

올해 DEFCON을 통해 공개된 파일 덤프를 계속해서 살피고 있다. 이번에는 GPKI 인증서에 관한 내용을 정리해 보고자 한다. GPKI 인증서는 행정기관과 공공기관, 일부 교육기관 등에서 사용하는 공식 전자서명 인증서로, 각종 전자정부 서비스에 필수적으로 사용된다. 한국에서 자체적으로 구축한 공인 인증 및 서명 체계이므로, 한국에서만 사용된다. 문제의 파일 덤프에서 GPKI 관련 자료가 나왔다는 건, 덤프의 주인이 한국을 노렸다는 증거가 된다.

지난 기사에서 pass.txt 파일을 집중적으로 파헤쳤다면, 이번 기사에서는 results.txt라는 파일을 분석해 보기로 한다. 기술적인 내용들이 포함되어 있긴 하지만, 누구라도 읽고 이해할 수 있도록 최소화 했다. results.txt 파일은 제목 그대로 ‘결과물’을 뜻한다. 혹시 해커가 뭔가를 시도했고, 그것에 대한 결과물을 텍스트로 정리해 놓은 파일은 아닐까? 이런 질문에서 이 파일을 열어봤다. 결과부터 얘기하면 의심한 게 맞았다. 한국의 공인 인증 시스템인 GPKI를 이리저리 열어보려 했던 결과가 여기에 담겨져 있었다.

파일 내용

먼저 파일은 다음과 같은 내용으로 가득 차 있었다. 다 읽을 필요는 없다. 밑에 해설이 나온다.

Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_env.key Password $cys13640229
Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_sig.key Password kla53128099*
Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_sig.key Password !jinhee1650!
Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_sig.key Password $cys13640229
Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_env.key Password ssa9514515!!
Key: /home/user/Downloads/cert/gkpi20200425/GPKI/Certificate/class2/136박정욱001_env.key Password kla53128099*
Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_sig.key Password ssa9514515!!

이 외계어 같은 텍스트들은 Key라는 것이 자바로 만들어진 어떤 소스코드들과 연결돼 있다는 걸 뜻한다. 그렇다면 우리는 이 소스코드들을 열어봐야 한다. 이 소스코드는 /work/home/user/Downloads/cert/src라는 디렉토리 안에 있었고, 같은 디렉토리 내 여러 파일들이 저장돼 있음을 확인할 수 있었다. 이 파일들과, 그 파일에 대한 간단한 설명, 그리고 파일 생성일은 다음과 같다.

파일명설명생성일
cert.java사전 파일을 읽고 인증서 크랙2016.09.18
CertCracker.javaThread 기반으로 Cracker 실행2020.05.10
Cracker.java전수조사 공격 기반 인증서 크랙2020.05.10
DictCracker.java사전 공격 기반 인증서 크랙2016.05.13
EncryptedData.java데이터 암호 처리 관련 클래스2025.04.14
single.java인증서 크랙 결과 단일 검증 클래스2025.04.21
single_bak.java SEED/CBC 암호문 복호화 테스트2015.01.21

위 표에 있는 파일 중, 중요 파일 몇 가지를 세부적으로 확인한다. 각각의 파일을 살펴보면 GPKI 인증서를 크랙하기 위해 전수조사(Brute-force Attack)와 사전 공격(Dictionary Attack) 할 수 있도록 구현되어 있다는 것을 알 수 있다. 전수조사를 위한 코드는 Cracker.java에서 사전 공격을 위한 코드는 DictCracker.java에서 확인할 수 있다.

여기서 눈여겨봐야 할 건 두 가지다. 바로 Cracker.javaDictCracker.java이다. 이 두 파일은 이름 그대로 크래킹과 사전공격(dictionary attack)을 위한 것이었다. 분석해보니 Cracker.java는 무작위 대입 공격, 즉 전수 조사 공격을 통해 인증서를 크랙하도록 만들어져 있었고, DictCracker.java는 공격자가 미리 뽑아둔 특정 문자나 문구를 대입하는 사전공격을 시도하도록 설계돼 있었다. 그러면 이 두 파일을 간략히 살펴보자.

Cracker와 DictCracker

먼저 Cracker.java 파일은 대입 공격에 필요한 패스워드들을 생성하는 작업부터 실시한다. 예를 들어 네 자리 자물쇠를 열어야 할 때 필요한 패스워드는 0000부터 9999까지 이르는 숫자들이다. 10000개의 숫자를 하나하나 대입하면 어느 순간 조합이 완성되면서 자물쇠가 열리게 되는데, 공격자가 Cracker.java를 통해 하려는 것이 바로 이런 것이었다. 대입할 패스워드들을 생성하고, 인증서 파일을 열고자 시도한다. 틀린 패스워드를 입력하면 에러가 발생하고 그 다음 후보가 입력되고, 맞는 패스워드가 적용되면, 그 패스워드 정보를 출력하면서 코드를 종료한다.

DictCracker.java의 경우 기본적으로 Cracker.java와 동일한데, 패스워드를 직접 생성하는 게 아니라 pass.txt라는 파일 내에 미리 저장된 패스워드들을 이용한다는 차이를 가지고 있다. 대입하는 패스워드가 틀리면 다음 패스워드로 넘어가고, 맞으면 Cracker.java의 경우와 마찬가지로 방금 맞았던 그 패스워드를 출력하면서 코드가 종료를 종료한다. 그래서 두 파일 모두 코드의 마지막 행은 다음처럼 구성돼있다.

public static void GapiDec(String passwd, String srcPath) {
        try {
            GpkiApi.init(".");
            PrivateKey priKey = Disk.readPriKey(srcPath, passwd);
            System.out.println("Key: " + srcPath + " " + "Password " + passwd);
        } catch (Exception ignored) {
            System.out.print(ignored.getMessage());
//            if (ignored.getMessage().contains("1301")) {
//                System.out.println(srcPath);
//                System.out.println(ignored.getMessage());
//            }
        }
    }

이 행이 실행되면 어떤 내용이 출력될까?

Key: /home/user/Downloads/cert/gkpi20200425/class2/163권오영001_env.key Password $cys13640229

이런 식이다. 어디서 많이 본 것 아닌가? 맞다. 이 기사의 처음 부분으로 돌아가 results.txt라는 파일을 열었을 때 나온 바로 그 내용이다. 이제 우리는 그 내용이 키 파일의 경로와, 그 키를 여는 데 필요한 패스워드로 구성된 것임을 확실히 알 수 있다. 즉, 누군가 GPKI 패스워드를 추출하기 위해 여러 가지 시도를 했고, 그 결과를 따로 파일에 정리해둔 것이라는 것이 분명하다.

💡
results.txt 파일에 저장된 정보가 전부 유효할까? 그건 알 수가 없다. 코드 실행에 필요한 라이브러리도 전부 데이터 덤프에 포함돼 있어 확인이 가능하긴 하지만, 32비트 컴퓨터에서 호환이 되도록 만들어져 있기 때문에 그러한 조건을 충족시키는 환경이 필요하다. 아쉽지만 필자의 컴퓨터는 애플의 M1 칩셋을 기반으로 하고 있다. 환경을 구축하고 검증하는 일은 본 글을 마무리한 뒤로 잠시 미뤄두고자 한다.

무슨 의미인가?

필자가 수행하는 분석 방식은 ‘정적 분석’이다. 즉 데이터 덤프에 파일 형태로 남아 있는 걸 있는 그대로 해석했다는 뜻이다. 이런 파일들을 직접 실행해보고, 코드들이 어떻게 동작하고 어떤 결과를 내는지 직접 살펴보는 걸 ‘동적 분석’이라고 하는데, 거기까지는 해보지 않았다. 보통 두 가지를 다 하는 게 더 정확한 분석으로 이어진다.

그렇다고 정적 분석이 의미를 갖지 못하는 건 아니다. 우리가 이번 분석을 통해 확실히 알아낸 것만으로도 상황이 심각하다는 걸 충분히 증명할 수 있기 때문이다.

  1. GPKI 인증서 유출이 발생했었다. 다만 그 경로는 알 수 없다.
  2. 그 정보를 획득한 공격자는 인증서를 사용하기 위해 크래킹을 시도했다.
  3. 크래킹의 결과를 따로 정리해둔 파일이 있다. 즉, 그 결과를 가지고 뭔가 추가적인 행위를 하려 했다는 뜻이다.

공격자는 한국 공공 서비스에서 사용하는 대한민국 대표 인증 시스템 정보를 획득해 크래킹했고, 그것이 다만 연구를 위한 목적은 아니었을 공산이 크다는 게 이번 분석을 통해 알아낸 것이다. 그것이 무엇인지는 모르겠으나, 누구인지도 확실하지 않으나, 분명한 목적을 가지고 한국의 인증 시스템을 뚫어내려 했다는 것이 좋은 소식일 리 없다.

공격자의 노력, 어쩌면 가장 무서운 것

해커를 ‘유능한 해커’로 만드는 데 필요한 재료들에는 여러 가지가 있다. 가장 먼저는 실력이다. 기본적으로 컴퓨터를 다룰 줄 알고 해킹도 할 줄 알아야 해커가 된다. 그 다음은 자원이다. 해킹을 한 번 한다고 해서 수입이 따박따박 들어오지 않는다. 어떤 공격은 성공 후 수개월에서 수년이 흘러야 비로소 현금으로 전환되기도 한다. 그렇기에 그 무수입 기간을 버틸 수 있어야 한다. ‘국가의 지원을 받는 해커’가 괜히 강력한 게 아니다. 이런 자들은 안정적으로 해킹에만 몰두할 수 있어서 무섭다.

하지만 그 모두를 갖추고 있다 해도 ‘동기’가 없으면 안 된다. 외신에는 해커를 묘사할 때 ‘determined’라는 표현을 동원하기도 하는데, 공격 성공에 대한 각오가 단단하다는 의미다. 어떻게 해서든 돈만 벌면 되는 해커들이라면 쉬운 표적만 골라잡으려 하기 때문에 방어하는 입장에서는 방어벽을 무한정 단단히 할 필요가 없다. 내 이웃보다 조금만 더 강하면 충분하다. 하지만 아무리 단단해도 나를 뚫어내려고 마음을 단단히 먹은 해커가 있다면 언젠가 뚫리고 만다. 특정 표적을 반드시 염탐하겠다거나 상하게 하겠다는 마음을 먹은 해커를 막을 보안 기술은 아직 존재하지 않는다. 해커가 노력하기로 결정하면 막을 방도가 없다.

이번 정적 분석을 통해 본 건 바로 이 ‘노력’이다. 해커가 노력했다. GPKI 인증서 정보를 어떻게 가져갔는지도 모르겠고, 실제 크래킹을 통해 어떤 피해를 추가로 입혔는지도 모른다. 하지만 그 과정에서 공격자는 크래킹을 시도했고, 그 결과를 차곡차곡 정리해 두기까지 했다. 이건 그 자체로 GPKI 인증 시스템에 의존하고 있는 곳에게는 심각한 소식이다.

우리는 유출 사고 후 이렇게 말하곤 한다. “유출된 정보는 암호화 되어 있으니 해커가 가져가도 별 쓸모가 없다. 그러므로 안전하다.” 하지만 이는 공격자의 크래킹 노력을 간과해서 하는 말이다. 이번 분석을 통해서 보았다시피 공격자는 가져간 데이터를 어떻게든 알아내려고 복호화를 시도한다. 여러 가지 크래킹 기술을 동원한다. 암호화는 언젠가 복호화 되게 되어 있으며, 해시 처리라는 것도 마찬가지다.

그렇다고 해서 과도한 추론과 망상으로까지 분석이 이어지면 안 된다. 이 분석을 바탕으로 ‘현 GPKI 시스템은 무용지물이 됐다’라거나 ‘모든 GPKI 기반 공공 서비스를 개편해야 한다’는 식의 주장까지 하는 건 무리다. ‘해외 세력으로 보이는 해커가 GPKI 인증서를 크래킹 하기 위해 애쓰고 있으며, 성과를 낸 것처럼 보인다’는 결과만 가지고도 우리가 취해야 할 조치는 많다.


데프콘 : APT 역추적 이슈에 대한 고찰 (1)
💡Editor’s Pick - 사실은 한국이 발칵 뒤집혔어야 할 사건 - 이런 사건이 흐지부지 묻힌다는 게 놀랄노자 - 이 사건을 통해 고찰해봄직 한 것들 윤리적 해킹 = 뜨거운 ‘아아’? 지금은 기억이 가물가물한 수년 전 어느 보안 행사에서의 일이다. 한 보안 전문가께서 기조 연설을 하시다가 ‘윤리적 해킹’이라는 표현 자체를 신랄하게 비판하셨다. 해킹이라는
데프콘 : APT 역추적 이슈에 대한 고찰 (2)
💡Editor’s Pick - 데프콘에서 공개된 한국 정부와 기업들의 자료 - 정작 한국에서는 ‘누구 짓이냐’로만 뜨거워지는 분위기 - 범인 지목은 사이버 사건 해결에서 최우선 과제가 아냐 세이버(Saber)와 사이보그(Cyb0rg)라는 두 명의 화이트 해커가 데프콘에서 한 APT 조직의 컴퓨터에서 캐낸 정보를 대량으로 공개했을 때, 한국 보안 업계는 커다란 충격을
데프콘 : pass.txt 파일 세부 내용 분석
💡Editor Pick - pass.txt 에 저장된 문자열 한글 자판 기준으로 변환 가능 - 한글 변환한 패스워드 통해 한글 기반 패스워드 패턴 파악 가능 - pass.txt 파일의 용도 파악과 대응 방안 한국에는 유독 특별한 행사였던 2025년 데프콘(DEF CON 33)이 마무리 된 지 벌써 2개월이 넘어가는 시점이다. 이

Read more

영국 군, 내년도에 대규모 이스포츠 대회 연다?

영국 군, 내년도에 대규모 이스포츠 대회 연다?

💡Editor's Pick for Juniors - 영국 군, 40개 동맹국과 함께 이스포츠 대회 열어 - 내년도에 있을 대규모 워게임 훈련...게임 하듯 진행 - 러우 전쟁 치르는 우크라이나 군에서 많은 아이디어 얻어온 듯 Juniors! 안녕! 테크를 가장 날카롭고 가치 있게 읽어주는 더테크엣지 아빠들이야. 영국 군이 내년에 국제적인 규모의 군사

By 문가용 기자
파일 이름 검색 도구 글롭에서 고위험군 취약점 나와

파일 이름 검색 도구 글롭에서 고위험군 취약점 나와

💡Editor's Pick - 개발자들이 널리 사용하는 도구 글롭 - 그 글롭의 명령행 인터페이스에서 취약점 발견돼 - 파일 이름이 공격 도구로 전환돼 개발자들이 흔히 사용하는 오픈소스 패키지인 글롭(glob)에서 위험한 취약점이 발견됐다. 일반 사용자들이 직접 사용할 일은 거의 없어 대중적으로 낯선 이름이지만, 개발자들은 이를 활용해 여러 가지 도구와

By 문가용 기자
삼성 갤럭시 A와 M 시리즈에 선탑재된 스파이웨어 논란

삼성 갤럭시 A와 M 시리즈에 선탑재된 스파이웨어 논란

💡Editor's Pick for Juniors - 삼성 저가형 스마트폰 시리즈에서 발견된 앱클라우드 앱 - 사실은 지는 여름부터 지적돼 온 스파이웨어 - 이런 스마트폰 문제 쉽게 해결되지 않아...소비자 훈련이 더 중요 Youngsters! 테크를 가장 날카롭고 가치 있게 읽어주는 더테크엣지 아빠들이야. 한국을 대표하는 회사인 삼성에서 프라이버시 침해 논란이 일어났어. 삼성이

By 문가용 기자