본문 바로가기

프로젝트

[운영] 취약점 문제 해결

  규모가 큰 프로젝트의 운영을 진행할 때는 여러 까다로운 절차를 주기적 거쳐야 한다. 특히 취약점을 체크할 때는 모의 해킹을 통해 취약점을 체크하고 결과 보고서를 보내준다. 안타깝게도 구축단계에서 놓친 몇 가지 문제로 인해 취약점들이 발견되었고, 내가 운영하는 웹 쪽에는 메모리 내 중요정보 노출이라는 좀 크리티컬한 취약점이 발견되었다.

  이 문제는 구축단계에서 미처 다 챙기지 못한 부분으로 보였다. 발견된 문제를 간단히 설명하면 앱의 메모리 덤프를 시도했을 때 개인정보의 일부가 평문으로 노출되는 문제였다.

  그래서 다시 소스를 확인해 보니 몇 가지 문제점들이 내 눈에 들어왔다. 먼저, 전역 상태관리 툴을 사용했던 문제이다. 내가 담당하는 소스는 React의 Recoil로 전역상태를 관리하는데, 이 Recoil의 state는 일반적인 React의 state와 달리 state를 입력하거나 수정했던 컴포넌트를 벗어나더라도 휘발되지 않는다. 일시적이지만 다른 컴포넌트로 전환되어도 메모리에 데이터가 적재되는 것이다. 

  이것을 해결하기 위해 내가 생각한 방법은 2가지이다. useEffect의 return을 활용하여 unmount 되는 시점에 데이터를 날리거나 그냥 개인정보의 경우 Recoil을 사용하지 않고 useState를 사용하는 것이다. 나는 후자로 이 부분의 문제를 해결했다.

  두 번째로 로그인의 아이디저장에서 문제가 발생했다. 앞서 개발을 리드했던 선임 개발자가 이 것을 localStorage를 활용하여 개발을 했는데, 아이디 역시 개인정보로 취급되기 때문에 취약점에 걸렸다. 그래서 나는 이 것을 암호화해서 localStorage에 저장하고 input창의 노출은 암호화되어 저장된 아이디를 decoded 하여 노출하는 방식으로 수정했다.