최근 스타트업 면접에 합격했다. 프론트 개발자가 많지는 않았지만 막 생긴 스타트업치고 조직화가 잘 되어 있었고, 연봉과 성장 가능성도 좋아 보여 정말 좋은 기회였지만 난 입사 제의를 거절했다.
이유는 공부해보지 못한 플러터로 개발하는 회사였기 때문이다. 인수인계를 받아 기존 코드를 이해하고 내가 맡은 부분을 개발해야 했는데, 그 과정이 신입인 나한테는 너무 부담이 됐다.하지만 다시 생각해보면 내가 하고자 하는 분야가 프론트엔드인데, 웹과 앱을 나눠서 생각한다는 것 자체가 그동안 너무 좁게 공부해왔던 것 같다.
그래서 이젠 흥미로운게 생기면 뭐든 얕게나마 도전하려고한다.
오늘은 보안이 뭔지 공부해보면서 해킹문제풀이사이트도 풀어보았다. 이 사이트에서 리눅스 공부도 할 예정이다.

내 웹사이트가 털리면 안 되니까 보안 공부는 필수이다.
최근 공급망 공격 뉴스가 자주 보인다. npm install이나 pip install처럼 오픈소스 패키지를 설치할 때도 공격이 발생할 수 있다. 오픈소스 커뮤니티에서 선한 개발자인 척 열심히 활동하다가, 어느 순간 악성코드가 포함된 버전을 배포하는 경우가 있다. 보통 우리는 최신 버전을 설치하는데, 그 과정에서 해킹당할 수 있는 것이다.
또한 최근에 핫했던 LiteLLM 이슈처럼 .env에 있는 OpenAI 시크릿 키 같은 민감한 정보가 탈취되는 경우도 있다. 요즘은 AI가 패키지 설치나 환경설정까지 알아서 해주는 상황이 많아졌는데, 그 사이에 해킹당할 수 있다는 여지도 남는다.
대표적인 사례로 Log4j 사건도 있다. 백엔드에서 로그를 출력하기 위한 라이브러리였지만, 특정 문자열만으로도 원격 코드 실행이 가능해지는 치명적인 취약점이 발견되면서 전 세계적으로 큰 문제가 되었다.
그동안 프로젝트할 때 프론트 레포에 보안 취약점 리포트가 올라오게 설정은 해뒀지만, 솔직히 제대로 고치지는 않았던 것 같다.
보통 해결할 수 있는 방법이 같이 오거나 버전을 바꾸라는 식으로 알려준다. 깃허브에서 “이 리포지토리의 이 패키지에서 취약점이 발견됐다”는 메일이 오기도 한다.

또는 커뮤니티에서 취약점이 있었다는 글을 보면 그때 해결하는 편이었다..
정보보안을 이해하려면 먼저 보안이 무엇인지 알아야 한다.
데이터를 안전하게 지키는 모든 행위다.
기밀성, 무결성, 가용성 세 가지로 나뉜다. 이 세 가지 중 하나라도 무너지면 보안이 뚫렸다고 생각하면 된다.
기밀성은 외부인이 데이터를 볼 수 없게 하는 원칙이고, 무결성은 데이터가 함부로 바뀌지 않도록 하는 것이다. 가용성은 필요할 때 데이터를 정상적으로 사용할 수 있게 하는 것이다.
시스템 또는 네트워크의 취약점을 악용하여 정보를 탈취하거나 시스템을 장악하는 행위다. 단순히 HTML 같은 코드를 공격하는 것만이 아니라, 해킹에도 여러 종류와 수단이 있다.
해킹 수단은 보통 하나씩만 일어나지 않고 여러 개가 복합적으로 일어나는 경우가 많다.
크로스사이트스크립팅(xss)란 악의적으로 스크립트 코드를 웹에 삽입한 후, 그 코드가 실행되도록 만드는 공격이다.
JS는 웹에서 동작을 담당한다.
예를 들어 인풋에 친 값이 인풋 아래에 뜨는 구조라고 했을 때,

인풋 안에
<script>alert(document.cookie)</script>
라던지
<script>alert("XSS 발생!")</script>
같은 값을 넣었을 때

스크립트가 실행되거나 사용자의 쿠키값이 나온다면, XSS 취약점이 있는 웹사이트라는 뜻이다.
원래 인풋에 입력한 값은 스크립트로 작동되면 안 된다.
공격자가 스팸이나 피싱 링크를 조금만 바꿔도 사용자는 쉽게 알아채지 못할 수 있기 때문에 항상 조심해야 한다.
프론트엔드 개발자 입장에서도 리액트가 기본적으로 XSS를 어느 정도 방어해주긴 하지만, 그것만으로 충분하지 않다. 특히 쿠키의 경우 JavaScript로 접근하지 못하도록 HttpOnly 옵션을 설정하는 등 추가적으로 신경 써야 한다.
HTTP는 데이터를 암호화하지 않고 주고받기 때문에, 중간에서 누군가 요청을 가로채면 아이디나 비밀번호 같은 정보가 그대로 노출될 수 있다.
반면 HTTPS는 데이터를 암호화해서 주고받기 때문에, 중간에서 데이터를 가로채더라도 내용을 쉽게 확인할 수 없다.
보안이라는 분야는 어느 상황 어느 코드를 방어할지 모르기때문에 특정 언어가 아닌 다 알아야하고 웹기술, 운영체제까지도 알아야한다고 느꼈다.
또한, 공격자는 하나의 취약점만 찾아내면 되지만, 방어하는 입장에서는 모든 취약점을 발견하고 없애야 한다. 그래서 기본적인 보안 개념을 아는 것은 필수라고 느꼈다.
해킹은 불법이기 때문에 모의해킹은 실제 서비스가 아닌 내 프로젝트나 실습 환경에서 해볼 예정이다. 해킹 문제도 풀어보면서 공격이 대충 어떤 방식으로 이루어지는지 익혀보려고 한다.
b