최근 보안 이슈로 돌아본 우리 서비스
최근 보안 이슈를 보며 우리 서비스를 돌아봤습니다
최근 해킹으로 개인정보가 유출됐다는 소식이 잇따르고 있습니다.
금융, 유통, 소프트웨어, 교육까지 분야를 가리지 않았고, 한 번에 수백만 건이 새어 나간 사고도 있었습니다.
여기에 PHP 자체에서 인증 없이 서버 코드를 실행할 수 있는 심각한 취약점까지 공개되어, 많은 기업이 긴급 점검에 나섰습니다.
공격자가 이를 이용하면 홈페이지 위·변조, 악성코드 유포, 데이터베이스 정보 유출까지 이어질 수 있습니다.
WELLPPS와 PPSPAY는 Java 기반으로 개발되어 PHP를 사용하지 않으며, 취약점 공개 이후 서비스 구성을 확인했을 때도 이번 취약점의 영향 범위에 해당하는 부분은 없었습니다.
웰네트웍스는 이런 소식이 들리면 "우리 서비스가 해당되는가"부터 확인합니다.
사고 소식을 하나씩 따라가 보면 몇 가지 공통점이 보입니다.
이번 글에서는 그 공통점 네 가지를 기준으로 우리 서비스를 다시 돌아본 이야기를 하려고 합니다.

핵심 시스템보다 외부에 열린 보조 기능에서 시작됐습니다
조회 페이지, 앱이 호출하는 서버 기능, 업무용 도구처럼 "중요하지 않다"고 여겨지던 곳이 먼저 뚫렸습니다.
본인 확인을 건너뛰고 같은 요청을 반복해 다른 사람의 정보를 조회하거나, 직원용 기능에 외부에서 접근하는 식이었습니다.
웰네트웍스는 모든 요청을 "누가, 어떤 역할로, 무엇을 보려 하는가"로 확인합니다.
사용자 역할에 따라 쓸 수 있는 기능과 볼 수 있는 정보를 나누고, 거래처가 자기 소유의 주문·회선만 조회하도록 요청마다 소유권을 확인합니다.
거래처가 쓰는 기능은 외부에 열려 있는 만큼, 핵심 기능과 같은 기준으로 점검 대상에 올려 두고 있습니다.
입력값을 그대로 믿은 곳이 뚫렸습니다

검색어나 입력란에 데이터베이스 명령을 섞어 넣는 공격은 여전히 가장 흔한 수법입니다.
서비스가 입력값을 명령문의 일부로 이어 붙여 실행하면, 공격자가 넣은 명령이 그대로 실행되어 저장된 정보가 유출될 수 있습니다.
실제로 운영 중인 서비스 중 하나에도 이런 공격 문자열이 담긴 요청이 들어온 적이 있었습니다.
웰네트웍스 서비스는 들어온 값의 형식과 범위를 먼저 확인하고, 사용자가 입력한 내용을 명령과 분리해 "값"으로만 다룹니다.
입력값이 명령문 안에 끼어들 자리가 없기 때문에, 당시 들어온 공격 문자열도 명령으로 실행되지 않고 단순한 글자로 처리되었습니다.
확인 결과 서비스와 고객 정보에는 피해가 없었습니다.
사람보다 오래 살아남은 계정과 열쇠가 문제였습니다
퇴사한 뒤에도 남아 있던 인증 정보, 코드 안에 그대로 적어 둔 접속 키처럼 "관리되지 않는 열쇠"가 침입 경로가 된 사고가 여럿이었습니다.
웰네트웍스는 계정, 권한, 접속 키마다 소유자를 표로 관리합니다.
누가 어떤 시스템에 어떤 열쇠를 가지고 있는지가 한 곳에 적혀 있어, 퇴사가 정해지면 그 표를 따라 계정을 닫고 권한을 거두고 키를 바꾸는 오프보딩 절차를 그대로 밟습니다.
사람이 떠난 뒤에 열쇠만 남는 상황이 생기지 않도록 만든 장치입니다.
접속 정보와 연동 키 자체도 코드에 적지 않고 따로 관리하며, 중요한 데이터는 누가 언제 바꿨는지 기록이 남도록 해서 이상한 변경이 있으면 어디서 시작됐는지 되짚을 수 있게 하고 있습니다.
알려진 취약점을 늦게 고친 곳이 당했습니다
공개된 취약점은 공개 당일부터 공격이 들어옵니다.
이번 PHP 취약점도 공개 전부터 공격 시도가 관측됐다는 소식이 있었습니다.
그래서 웰네트웍스는 보안 소식이 들리면 "우리가 쓰는 구성 요소인가, 영향 조건에 해당하는가"를 먼저 확인하고, 해당된다면 업데이트 일정을 바로 잡습니다.
이번 PHP 건은 해당되지 않는다는 확인으로 끝났지만, 확인 자체는 매번 같은 순서로 반복하고 있습니다.
마치며

이번 PHP 취약점은 웰네트웍스 서비스의 영향 범위에 해당하지 않았습니다.
실제로 들어왔던 공격 요청 사례에서도 서비스와 고객 정보에는 피해가 없었습니다.
최근 사고들이 보여 준 것은 "큰 시스템"이 아니라 "작은 틈"에서 시작된다는 점입니다.
새로운 보안 이슈는 언제든 생길 수 있습니다.
앞으로도 보안 소식에 귀 기울이며 작은 틈까지 점검하고, 필요한 부분을 계속 보완해 나가겠습니다.