자바에서 보안실현(2)못할 것도 없다, 안될 리가 없다

경험이 실력이 되는 순간이 반복되고 있어서

by 늘여름

웹해킹 위험을 네트워크 트래픽 데이터에서 탐색하고(수동형), 모의해킹을 통해 취약점을 분석하는(능동형) 보안 프로그램(웹 앱 또는 라이브러리 형태로 구상)을 기획하고 개발하는 단계에서 한계에 다다랐습니다.


또한 맥북을 쓰는 팀원과 달리 윈도우 노트북으로 각종 통합개발환경(IDE)을 시작으로 MySQL Server부터 MongoDB까지 메모리를 혹사시키고 있는 제가, 테스트를 위해 겨우 깔게 된 Docker, Oracle VirtualBox, Kali Linux로 컴퓨터는 살려달라고 냉각팬을 회전시키며 엔진 소리를 내고 있는 지경에 이르렀습니다.

(???: 제발 그만 설치해)


그렇게 환경을 구축한 보안 취약점을 포함하는 소프트웨어인 DVWA만으로는 공격을 적극적으로 구현하고 방어하기에 부족함이 크다고 느꼈던 찰나에 프로젝트의 확장성을 위해 새로운 시도를 하게 되었습니다.

즐거움만 끝이 없는 게 아니라 공부에도 끝은 없다는 걸 하면서 배웁니다.

여전히 알고 싶은 세계는 저너머에 한가득이고 시간이라는 자원은 너무나도 제한적이어서 시곗바늘이라도 잠시 붙잡아 놓고 싶을 때가 많습니다. 어쩌면 공부를 한다는 것은 모르는 내용을 찾아가는 과정일 수 있겠습니다.

지금의 프로젝트에 잘 맞는 짤이라 들고 왔는데요, 도망치고 싶지만 발만 앞으로 나가는 저희가 만드는 mock hacking web은 사진 속 자전거와 꼭 닮아있습니다.


되돌릴 수 없다, 될 때까지 한다

저는 4월 한 달 팀원이 기사 실기 자격증 시험을 준비하고 응시하는 기간 동안 본 플젝의 스팟성 미니 과제를 수행하게 되었습니다. 이제 와서야 지난달의 저에게 돌아가서 딱 한마디만 해줄 수 있다면, 네가 틀리지 않았고 곧 다음으로 오게 될 테니 걱정하지 말라고 (그게 안되면 걱정은 하되, 손가락은 늘 움직이라고) 이야기해주고 싶습니다.


친구와 달리 이번 생에 웹개발은 처음이라는 사실을 아예 간과한 채 진행했던 터라 그야말로 맨땅에 헤딩을 넘어 끊임없는 시행착오 속에서 임하곤 했습니다. 매일 의욕이 꺾였다가 생겼다가 하는 반복이 기적일 정도라고 할까요?


모의해킹을 수행하고 직접 네트워크 트래픽에서 패킷 데이터를 수집해서 공격 패턴에 대한 분석을 거쳐 이력을 남기는 일종의 침입탐지 시스템(IDS)을 개발하기 위한 도구로, 정보보호 관점에서의 취약점을 설계한 대학교 학사관리 시스템 웹사이트를 구축하기 시작했습니다.

특히 데이터베이스에 접근하는 비밀번호를 암호화해서 리소스 파일에 두고 시스템 로컬 변수에 복호화 키를 통해 로그인과 회원가입 로직을 수행하도록 레퍼런스를 뒤져가면서 프로세스를 모두 구축해 내던 순간이 그토록 짜릿할 수가 없었습니다.

로컬 서버를 구동하여 직접 만든 회원가입 폼을 통해 데이터베이스 테이블에 저장된 회원 정보를 쿼리를 날려서 조회하던 그 당시에는 어찌나 기뻤는지 모릅니다.(도파민이 막 터졌었죠.)


문득 다양한 취미를 가지고 있다는 주변 분들의 칭찬을 들을 때마다 감사하면서도 과연 이게 취미가 맞는지 의문이 넌지시 올라오기도 합니다.

어느 단계를 지나면서 마냥 흥미를 느꼈던 때를 떠나와서 그런 걸까요.(이건 취미 입장도 들어봐야겠습니다.)


취향이라는 수식어를 붙이기에 유감일 정도로 저희 팀은 평일 저녁과 밤, 주말 내내 에러로 인한 스트레스에 머리를 부여잡으며 뇌에 힘을 주고 문제를 풀어가는 시간을 보내곤 합니다. 그러니 친구가 그러더군요, 대신에 잘 되었을 때 그 벅찬 감동은 몇 배는 더 큰 법이라고 말입니다.


보상 없는 고통은 없다는 어떤 이의 말이, 저에게는 어떤 고통은 감수할 만한 이유가 충분하다는 뜻으로 들립니다. 자신의 가치관을 만족시키면서 의미 있는 고통이 따라오는 건 행복한 상태라고 볼 수 있지 않을까요? 3년 동안 매일 제 경추(목)와 노트북을 지키던 거치대는 이번이 어느덧 3번째이고 그마저도 고장을 앞두고 있듯이 말입니다.

MySQL bin 파일을 못 찾고 헤매다가 프롬프트창에서 만난 외계어와 가입된 회원 권한에 맞는 홈페이지로 이동할 때 헤더와 푸터를 중복해서 잘못 만든 메인 화면입니다.(왼쪽부터)

못할 것도 없고 안될 리도

못할 것도 없다, 안될 리가 없다

OWASP(웹 애플리케이션의 취약점을 연구하는 비영리재단)이 가장 최근인 2021년에 발표한 상위 10개 취약점 1,2위가 부적절한 인가(broken access control)와 암호화 실패(cryptographic failures) 문제라고 합니다.


특히 '17년 5위에서 21년 1위로 급부상한 사용자 권한을 확인한 후 접근제어하는 비즈니스 로직에 포함된 취약점(예: url 파라미터 변조로 권한 상승, 인증 없는 관리자 페이지 접근, 일반 사용자의 권한 없는 데이터 조회 또는 수정 등)을 직접 다루어 보려고 합니다.


기존 오픈소스 웹 프로젝트 레퍼런스보다 권한 관련 테스트를 더 정밀하게 수행할 수 있도록 MVC(모델-뷰-컨트롤러) 패턴과 3-tier(계층) 아키텍처를 적용할 때 이를 반영하고 있습니다.

현업의 입장에서 EAM 권한관리 솔루션을 고도화하고 활용해 본 경험이 예상치 못한 기반이 되어주는 듯합니다.

날씨가 참 맑아서 한적하거나 반대로 북적이는 곳에 가서 환기를 시키면 다시 책상 앞으로 왔을 때 동기가 충전된 상태가 되곤 합니다. (왼쪽부터 @중랑천, @노들섬, @망원한강공원)


3주 미니 과제가 몇 달 플젝 수준으로 규모가 커져서 일정을 유동적으로 조정했답니다. 6월까지 웹 개발을 마무리하고 배포한 후 밀린 이론 학습을 하면서 9월에 다시 실전으로 침입탐지 라이브러리/웹 앱을 구상할 예정입니다.


굳이 스케줄 공유를 하는 이유를 물으신다면 비는 시간동안 놀지 않고 배우려는 셀프 감옥 정도로 봐주시면 됩니다.

계획은 언제나 바뀔 수 있고 목표는 깨지고 새롭게 수립되기 마련이니까요. 여러분도 연초에 다짐했던 일이 2분기를 넘어와서 흔들리고 있다면 확정적으로 달성할 수 있는 것부터 잡아서 놓지 말고 이어가시기를 추천드립니다.

원래는 수면제를 처방받아서 먹고 있는데, 집에 두고 와서요. 그냥 판매하시는 수면유도제 아무거나 돼요.
규칙적인 생활 같은게 쉬운일이 아니거든요.

쉬운 일이 아니죠. 그렇다고 약이 쉽다고 막 쓰면 익숙해져서 점점 더 강한 약을 찾게 될 거예요. 의존하게 된다고요. 아무것도 하지 말아봐요. 누워서 발끝부터 손끝까지 힘을 빼봐요.

지금 목에 잔뜩 뻣뻣하게 힘이 들어갔잖아요. 목이 서 있는데, 어떻게 잠을 자요. 그게 다예요. 너무 애써서 잠을 못 자는 거예요.

나는 사람들한테 필요한 약을 주는 약사고. 그 일을 하는 게, 내가 계속 살아갈 수 있는 이유야. 언니가 나보고 그런 약사가 되라고 했거든.

- 고혜원 작가님, 어둔 밤을 지키는 야간약국 中 -
keyword
토요일 연재
이전 17화업무환경 설정 초기화로 새로운 작업이 시작되고 있어서