대한민국의 교육청엔 학생과 교직원에게 오피스와 윈도우를 무료로 지원해주는 정책이 있습니다. 교육청에서 학생에게 오피스 계정을 발급해 줄 때
1. 인증코드 입력 → 2. 소속 기관 인증 → 3. 본인 인증 → 4. 계정 발급
정도의 단계를 밟습니다. 현재 *교육청 소속 학교에 재학중인 학생으로서 약간의 상상을 해보았습니다. "과연 인증 단계를 건너뛸 수 있을까?"
안타깝게도, 성공적이였습니다. 성공한 이유를 살펴보자면 다음과 같습니다.
1. 레거시 기술의 사용으로 소스코드가 그대로 노출
2. 인증 절차가 클라이언트 단에서만 이루어진다
3. 재학 인증 절차가 없다
1에 바탕하여 2번에 집중해서 생각을 해보겠습니다. 발급 사이트에서는 웹팩이나 파섹같은 번들러를 통한 Code Splitting이나 Minifier, Uglifier를 전혀 사용하지 않고 제이쿼리 하나만 사용하고 있습니다. 게다가 주요 코드가 외부 파일이 아닌 페이지의 Html에 그대로 포함되어 있습니다. 여기서 노출된 소스코드의 인증코드 확인 절차를 살펴보면,
1. 인증코드가 모두 입력되었는지 확인한다
2. 인증코드 확인 서버에 확인을 요청한다
인증코드
2번의 서버 요청 부분이 문제가 되었습니다.
code는 인증 코드를, utype은 가입 유형(학생)을, _는 요청한 타임스탬프를 의미합니다. 여기서는 그 흔한 세션이나 토큰조차 사용되지 않고 생으로 요청을 날려서 "과연 이게 서버가 준 응답이 맞는가"를 검증할 수 없게 됩니다. 그저 if문 하나로 인증이 이뤄집니다. 이 과정을 건너뛰어도 진행에는 문제가 없다는 뜻이 됩니다. 인증코드를 건너뛰기 위해서는 MITM이나 URL 바뀌치기 등이 있지만, 쉬운 방법으로는 그냥 코드를 삭제하는것으로도 건너뛸 수 있습니다.
요청과 마찬가지로 응답도 별도의 인증 절차는 없습니다.
소속기관/본인 인증
황당할 정도로 인증이랄 게 없는 모습이었습니다. 절차도 없고 내용도 없었습니다. 그저 입력 되었는가? 만을 확인했고, 그 밑에는 소속 정보를 허위로 기재할 경우 불이익을 받을 수 있습니다.라는 안내 문구가 쓰여있었습니다. 별도의 인증 없이 입력 체크만 하였기에, 마찬가지로 코드를 삭제하거나 아무 숫자나 입력해도 진행에 지장이 없었습니다.
본인인증은 구현해본 적이 없어서 잘 모르겠지만, 본인이 아니더라도 진행이 원활히 이루어진 점은 문제가 있어 보였습니다.
결론적으로, 해당 교육청 소속이 아니더라도, 학생이 아니더라도 오피스를 발급받을 수 있었습니다. 다른 서비스도 이런 수준의 보안이라면, 과연 키보드 보안을 떡칠하고 액티브엑스를 설치하더라도 그게 올바른 보안일까요? 학교폭력 실태조사와 교원 능력 개발평가를 매년 진행하고, 학생의 모든 정보를 제공하는 교육청의 다른 서비스도 분명 치명적인 보안의 문제가 있을 거라 생각됩니다. 이번 수능 성적표 유출 사건과 더불어, 우리나라 정부 기관의 보안 실태에 대해 다시 한번 생각해봐야 하는 계기가 되었으면 좋겠습니다.