E2E 개념 및 파라미터 암호화 우회

sookyeong·2022년 3월 30일
0

E2E 개념 및 파라미터 암호화 우회


1. E2E (= E2EE) 란?

End to End Encryption = 종단간 암호화

정보를 발신할 때부터 수신할 때까지 암호화를 유지한 채로 전송하는 방식이다.

종단간 암호화가 적용되지 않은 경우 발신원에서 암호화된 정보가 중간 서버에서 복호화된 뒤, 재암호화되어 수신원에게 전달되기 때문에 해독 가능한 정보가 중간 서버에 잔류하게 된다.

따라서 이를 노리고 중간 서버를 공격한 공격자 또는 중간 서버의 관리자가 해당 정보를 열람할 수 있게 되는 문제가 발생한다.

종단간 암호화가 구현된 경우 발신원의 정보가 최초에 암호화된 상태 그대로 수신원에게 전달되므로 공격자 뿐만 아니라 정보를 전달하는 서버 조차도 키를 몰라 해당 정보에 접근할 수 없게 된다.

  • ex) 카카오톡의 비밀 대화 기능, 텔레그램의 비밀 대화 기능 등


2. 모의해킹 중 E2E가 미치는 영향

파라미터가 암호화되기 때문에 프록시로 패킷을 잡아도 어떤 정보가 전달되는지 알 수 없고, 변조 역시 불가능하다.


3. 파라미터 암호화 우회 로직

E2E 암호화는 클라이언트 측에서 일어나기 때문에 JS로 컨트롤된다고 볼 수 있다. JS는 조작이 가능하므로 함수를 추적하여 Real Data가 실제적으로 암호화되는 구간을 찾으면 암호화되기 전 prompt를 통해 전달되는 파라미터가 무엇인지 확인하고 변조할 수 있다.


4. 암호화 구간을 찾는 방법

  1. 해당 페이지가 로드되는 과정에서의 응답 패킷을 잡아 해당 페이지가 어떻게 이루어져있는지 확인한다.

  2. 페이로드가 들어갈 폼이나 버튼 등에 걸려있는 이벤트 핸들러를 확인하여 어떤 함수가 호출되는지 확인한다.

  3. 호출되는 함수의 클래스를 확인하여 로드된 JS 중 해당 클래스가 구현된 파일을 찾는다.

  4. 해당 파일을 찾았다면 클래스 내부의 메소드를 찾아낸다.

  5. 해당 메소드의 동작 흐름을 파악하여, 암호화되기 직전에 prompt를 찍는다.

    • 암호화되기 전의 정보가 value라면, data = prompt("Real Data:", value) 와 같이 사용한다.
  6. 이후 패킷을 포워드한 뒤 페이지로 돌아와 폼을 기입하여 submit하면 prompt가 찍힌다.

  7. prompt에 담긴 value로부터 전달되는 파라미터 및 페이로드를 확인할 수 있고, 원하는 값으로 변조할 수 있다.

profile
actions speak louder than words

0개의 댓글