펜타시큐리티 개발자 인턴 후기

전지적 인턴 시점_by채연

안녕하세요

펜타시큐리티 보안 기술 연구소 와플개발부 인턴 노채연입니다

벌써 학교에 위치한 펜타관에서부터 인턴으로 근무한지 7개월, 회사에 온 지는 2개월 정도가 지나서 그동안 겪고 배운 여러 이야기들을 해볼까 합니다!

이야기를 시작하기 전 저에 대한 소개를 먼저 해보자면 저는 학교 다니면서 자격증을 취득하고, 더 깊이 공부하고 싶은 게 생기면 관심 있는 연구실 세미나에 참여하는 등과 같이 학업적인 것 말고는 특별한 인턴경험이나, 경력이나, 대회에 참여해 본 경험이 없었습니다.

.

그러던 중

펜타시큐리티 X 국민대학교 산학협력 인턴을 모집한다는 소식을 듣게 되고…

설명회를 하기도 전에 지원하겠다는 패기를 내보입니다.

사실 대학생에게 회사란 상상만 해본 미지의 세계이다 보니 회사에 가서 저에게 주어진 과제나 업무를 잘할 수 있을지 많이 고민하고 걱정을 했습니다.

하지만 제 나이 스물셋, 뭐든 도전해 보고 배움에 적극적으로 부딪혀볼 나이라는 자신감 하나로 보안 기술 연구소 인턴 생활을 시작하게 되었습니다.

그럼 그동안의 인턴 생활에 대한 저의 이야기를 해보도록 하겠습니다!

.

먼저 제가 인턴으로 근무한 와플개발부의 WAPPLES은 API 공격을 포함하는 웹 공격에 대처하는 지능형 웹 방화벽입니다.

웹 방화벽이란? 악의적 공격과 원치 않은 인터넷 트래픽으로부터 웹 애플리케이션을 보호하기 위한 방화벽으로 웹 연결 애플리케이션을 보호하고 엑세스로그를 수집합니다.

웹 방화벽의 기본 역할이 웹 공격을 탐지하고 차단하는 것이기 때문에 먼저 웹에 대해 공부하는 게 제가 가장 먼저 해야 할 일이었습니다. 인턴을 시작하고 가장 처음엔 팀장님이 추천해 주신 책이랑 RFC문서를 보면서 HTTP가 무엇인지에 대해 먼저 이해를 하기 시작했습니다.

인턴을 시작하기 직전에 들은 수업에서 TLS, EAP,EPS AKA와 같은 웹 프로토콜을 공부하면서 ‘나 어쩌면 웹이랑 잘 맞을지도..?’ 라고 생각하던 차에 웹 방화벽 팀에서의 인턴을 하면서 HTTP 공부라니, 반가웠습니다.

사실 이렇게 책을 읽고 문서를 공부하면서 웹에 대한 공부를 할 때는 크게 와닿지 않았던 개념들이 툴을 익히며 wireshark로 실제 패킷을 캡쳐해서 분석해보고, 로컬호스트로 만든 서버에 Burp suite로 공격을 해보면서 더 직관적으로 와닿게 되었습니다.

RFC 문서를 보면서 정리하는 내용보다 제가 공부하다가 찾아 적어 넣은 내용이 더 많은 수준이었는데, 실제로 패킷을 분석하고 파싱 하는 코드를 구현하면서 이 모든 공부들은 밑거름이 되어 구현에 도움이 되는구나 싶었습니다.

그 이후로 크게 목표로 잡고 진행한 프로젝트는 크게 5가지였습니다.

  1. web crawling 프로그램 구현
  2. HTTP Parser 구현
  3. Detect logic 구현 후 로그 수집
  4. kcmvp 암호 모듈 설계 및 구현 (인턴 공통 프로젝트)
  5. OWASP API Top 10 분석

.

이미 python은 진작에 마스터했다는 자신감으로 crawling에 뛰어들었지만

#이런_에러는_또_처음이라

혼자 어떤 시도까지 해보고나서 질문을 해야 할까를 고민하며 구글링과 한 몸이 되어 한참을 수정하던 오류는 팀원분 한 분의 도움으로 말끔히 풀리기도 했습니다. 내가 그동안 고민한 시간은 무엇이었나, 어떻게 더 알차게 고민했어야 했을까라는 생각이 들기도 했습니다. 하지만 Exploit DB 사이트 크롤링을 할 때 끙끙대던 오류는 cve 사이트 크롤링을 할 때는 크게 어려움 없이 넘긴 것을 보고 나의 고민이 그렇게 헛된 시간은 아니었다는 생각을 했습니다.

.

KCMVP가 뭐지?

인턴 공통 프로젝트였던 KCMVP는 제가 가장 어려워한 프로젝트이기도 합니다. 주변 전공자 친구들에게 물어봤을 때도 KCMVP라는 주제 자체가 전공자들에게도 쉽게 접할 수 있는 분야가 아니었습니다. 인턴끼리 모여 세미나를 진행하면서 처음부터 보안 명세를 공부하고, 설계하고, 암호 알고리즘을 구현하고, 내부 함수를 구현하면서 한마디로 삽질을 많이 했습니다. 암호모듈 특성상 오픈소스나 참고할 만한 설계서가 없다는 점에서 조금 더 끈기있게 찾아보고 생각해야 하는 주제였던 것 같습니다. 하지만 인턴십을 통해 이런 공통 프로젝트로 제가 공부하는 분야가 아닌 다른 주제의 프로젝트도 진행해보고 치열하게 고민해봤다는 점에서 큰 의미가 있었습니다.

.

HTTP Parser 여정기

호기롭게 HTTP 공부를 끝낸 후 HTTP Parser는 쉽게 뚝딱 구현해냈을까요?

그저 pcap으로 패킷을 수집해서 파싱하는 코드만 짜면 되겠지~ 단순하게 생각한 저는 그리 단순한 구조가 아니었다는 걸 깨닫게 됩니다

wireshark를 익힌데엔 다 이유가 있다

패킷을 분석할 때 본 대로 생각하면 온전한 request response 패킷이 하나씩 모여 transaction을 이루고, transaction이 모여 stream을 이룬다는 걸 알 수 있었습니다. 이 구조를 실제 구현에도 적용하고, 어떻게 공격을 탐지하고 탐지패턴은 언제 태워야 되는지 등 고려해야할 것에 비하면 제가 생각한 건 너무 단순한 개념이었습니다. 이를 깨달은 이후 구조를 바꾸고, 예외처리,메모리 관리 등을 고려하며 수정과 보완의 절차에 들어갑니다.

.

구현 중 막혔을 때의 표정

사실 구현을 하면서 느꼈던 점은

“난 코드를 빠르고 깔끔하게 짜진 못하는구나” 였습니다.

그동안 코딩을 하면서 어떻게든 해서 결과를 내고 제출하는데, 코드가 일차원적이고, 간결한 코딩을 못한다고 느꼈었는데요.

KCMVP 암호모듈이나, HTTP parser를 구현하면서 여러 클래스를 만들어 각각의 역할을 나누고 차례차례 간결하게 짜는 것이 익숙치 않다 보니 여러 번 수정을 거쳤습니다.

여러 번 코드를 뒤엎고 다시 짜면서 가장 중요하다고 느꼈던 점은 하나의 큰 개념만 보고 무작정 구현하기보다는 차례차례 설계하여 기능 하나씩 구현하는 것이 정말 중요하다는 것을 느꼈습니다. 특히 저 같은 초보 개발자에게는 더더욱이요! 처음에 잡아둔 방향을 계속 되짚으면서 구현하는 것이 머리로는 이해하는데 구현의 과정에서 길을 잃을 때 이를 다시 바로잡을 수 있는 좋은 방법이었습니다.

고민하고 적으면서 구현하다보니 다 채운 공책

구현을 하면서 어떤 클래스에 무슨 기능을 넣어야 하고, 그 이후엔 어떤 순서로 구현을 해야 하는지 차근차근 정리하며 구현하는 과정을 겪으면서 하나의 프로그램을 개발할 때 어떠한 절차로 진행되는지 그 과정에 대해 배울 수 있게 되었습니다.

.

인턴의 관점에서 바라본 회사의 분위기

사실 인턴을 하기 전에 하는 걱정들 중 회사 분위기는 어떨지, 인턴이라는 직위로 회사의 구성원으로 잘 적응할 수 있을지에 대한 부분도 큰 비중을 차지할 것이라고 생각합니다.

직장 생활의 두려움을 생각했을 때 생각한 이미지는 전혀 없었고 밝고 커뮤니케이션이 활발한 좋은 분위기의 회사라는 생각이 들었습니다. 팀원분들 외에도 많은 분들께서 어려운 건 없는지 살펴주셔서 ‘인턴인데 회사 분들과 잘 어울릴 수 있을까’라는 걱정은 무색하게 잘 지낼 수 있었습니다. 가끔은 너무 집중해서 거북이가 되기 직전일 때 챙겨주시면서 구출해 주신 적도 많았던 것 같습니다. 종종 아침에 티타임을 가지면서 이야기도 나누고 주변 맛집도 한 군데씩 가보면서 내일은 뭐 먹지 하는 생각으로 더 재밌게 다닐 수 있었습니다.

.

글을 마치며

글을 마치며 인턴 생활 동안 느낀 점에 대해 말씀드리려고 합니다.

  1. 학업과 인턴의 균형을 잘 맞추는 것이 중요하다

저는 4학년 1학기 후반부터 2학기까지 인턴생활을 했는데요. 이 산학협력 인턴의 장점은 학교를 다니면서 인턴생활을 할 수 있다는 점입니다. 학점이 많이 남지 않았거나 인턴에 완전히 집중할 수 있는 상황이 가장 최선이겠지만 학점이 많이 남았거나 학업에 시간을 많이 투자하는 편인 경우도 있을 것이라고 생각합니다. 둘 중 어느 하나도 놓치지 않기 위해서는 회사에서 배려해 주시는 만큼 남는 시간을 쪼개서 노력하거나 주어진 시간 동안 최대한 집중하는 것이 중요합니다.

2. 공부는 구현과 함께 계속되어야 한다

crawling 프로그램과 HTTP parser를 구현하면서 저는 기본적인 개념 말고도 웹에 대해서는 정말 더 많은 공부가 필요하다고 느꼈습니다. 제가 구현을 할 때 단순하게 개념적으로만 접근하다 페이지를 넘기며 데이터를 읽고, 패킷을 수집하는 과정에서 생길 수 있는 예외를 고려하지 못하여 여러 차례 수정하는 일이 있었습니다. 패킷이 나눠져서 올 수도 있고, request 혹은 response문이 연속으로 올 수도 있는데, 왜 단순하게 생각했을까 하면서 수정을 거듭하면서 더 깊이 있게 공부하는 것이 필요하다는 생각이 들었습니다. 단순한 개념 공부나 구글링으로 찾은 몇몇 예제로는 알 수 없는 부분이 많으니까요. 이러한 시행착오를 겪으며 당연한 이야기지만 개발을 하고있는 주제와 사용하는 라이브러리, 툴에 대해 지속적으로 공부를 하면서 여러 상황에 맞춰 구현을 하는 것은 정말 중요하다는 생각이 들었습니다.

3. 인턴으로써 가져야할 자세

그동안 프로젝트를 진행하면서 팀장님의 피드백에 귀를 기울이고 수정사항을 반영하도록 노력을 했지만 이해를 하지 못하거나, 듣고 적어둔 부분에 대한 내용을 까먹는 일도 있었습니다. 이때 다시 여러 번 질문을 드리는 일이 생기면서 자신에게 많이 실망하고 죄송해지는 일이 많았습니다.

그땐 정말 어려워하고 모르겠다고 생각한 부분을 지금 시점에서 다시 돌아보면 왜 그렇게 어려워했을까 라는 생각이 들기도 합니다. 이런 걸 보면 그래도 이 과정을 통해 조금씩은 성장한 거 아닐까 생각하며 다음에 새로운 도전을 하게 되면 더 열심히, 잘해야지 마음을 다잡게 되는 것 같습니다. 이게 모두 속도가 느린 저에게 차근차근 다시 길을 잡아주신 팀장님과 도움이 필요할 때 기꺼이 도와주신 팀원분들 덕분이었던 것 같습니다.

충분히 스스로 고민해 보고 모르겠으면 방향을 잡기 전에 고민한 부분에 대해 말씀을 드리고 의견을 듣는 게 정말 중요한 자세라는 생각이 듭니다. 인턴이라는 포지션이 업무적으로 일을 먼저 배우는 단계이기도 하지만 다르게 보면 팀에 잘 스며드는 과정을 미리 겪는 것이기도 하니까요. 회사라는 단체생활에서 한정된 기간 안에 주어진 일을 마무리하는 것이 중요한 만큼, 필요 이상의 시간을 혼자 고민하는 것보단 의견을 나누는 것이 가끔은 가장 명확한 해결 방안일 수 있다는 생각이 들었습니다. 저는 그러지 못해서 시간을 많이 지체한 점에 아쉬움이 남습니다.

마지막으로 사실 처음에는 주변에서 웹 공부를 해본 친구들로부터 너무 어려운 분야라는 후기를 많이 들어서 걱정이 많았는데요. 그래도 난 잘할 수 있다는 생각 하나, 뭐든 열심히 배워보자는 패기 하나로 보낸 7개월이었습니다. 인턴 기간 내내 스스로가 너무 많이 부족하다는 생각이 들어서 힘들었지만 많이 배우고 성장한 좋은 시간이 되었습니다. 목표한 것을 모두 완벽하게 이루지 못한 점은 아쉽지만 남은 시간 동안 더 노력해서 하던 일을 잘 마무리하고 싶다는 마음이 더 큰 것 같습니다.

나중에 인턴을 하게 될 분들께 작은 도움이라도 되길 바라면서 글을 마치겠습니다. 인턴 적응기를 작성한 인턴 노채연이었습니다.

긴 글 읽어주셔서 감사합니다!

--

--