내 서비스가 털린다면?

오다현·2026년 4월 28일

코코아 스터디

목록 보기
2/3
post-thumbnail

최근 스타트업 면접에 합격했다. 프론트 개발자가 많지는 않았지만 막 생긴 스타트업치고 조직화가 잘 되어 있었고, 연봉과 성장 가능성도 좋아 보여 정말 좋은 기회였지만 난 입사 제의를 거절했다.

이유는 공부해보지 못한 플러터로 개발하는 회사였기 때문이다. 인수인계를 받아 기존 코드를 이해하고 내가 맡은 부분을 개발해야 했는데, 그 과정이 신입인 나한테는 너무 부담이 됐다.하지만 다시 생각해보면 내가 하고자 하는 분야가 프론트엔드인데, 웹과 앱을 나눠서 생각한다는 것 자체가 그동안 너무 좁게 공부해왔던 것 같다.

그래서 이젠 흥미로운게 생기면 뭐든 얕게나마 도전하려고한다.

오늘은 보안이 뭔지 공부해보면서 해킹문제풀이사이트도 풀어보았다. 이 사이트에서 리눅스 공부도 할 예정이다.

내 웹사이트가 털리면 안 되니까 보안 공부는 필수이다.


유명한 보안 이슈들

최근 공급망 공격 뉴스가 자주 보인다. npm install이나 pip install처럼 오픈소스 패키지를 설치할 때도 공격이 발생할 수 있다. 오픈소스 커뮤니티에서 선한 개발자인 척 열심히 활동하다가, 어느 순간 악성코드가 포함된 버전을 배포하는 경우가 있다. 보통 우리는 최신 버전을 설치하는데, 그 과정에서 해킹당할 수 있는 것이다.

또한 최근에 핫했던 LiteLLM 이슈처럼 .env에 있는 OpenAI 시크릿 키 같은 민감한 정보가 탈취되는 경우도 있다. 요즘은 AI가 패키지 설치나 환경설정까지 알아서 해주는 상황이 많아졌는데, 그 사이에 해킹당할 수 있다는 여지도 남는다.

대표적인 사례로 Log4j 사건도 있다. 백엔드에서 로그를 출력하기 위한 라이브러리였지만, 특정 문자열만으로도 원격 코드 실행이 가능해지는 치명적인 취약점이 발견되면서 전 세계적으로 큰 문제가 되었다.


지금까지의 보안 취약점 관리

그동안 프로젝트할 때 프론트 레포에 보안 취약점 리포트가 올라오게 설정은 해뒀지만, 솔직히 제대로 고치지는 않았던 것 같다.
보통 해결할 수 있는 방법이 같이 오거나 버전을 바꾸라는 식으로 알려준다. 깃허브에서 “이 리포지토리의 이 패키지에서 취약점이 발견됐다”는 메일이 오기도 한다.

또는 커뮤니티에서 취약점이 있었다는 글을 보면 그때 해결하는 편이었다..


정보보안을 이해하려면 먼저 보안이 무엇인지 알아야 한다.

보안이란?

데이터를 안전하게 지키는 모든 행위다.

기밀성, 무결성, 가용성 세 가지로 나뉜다. 이 세 가지 중 하나라도 무너지면 보안이 뚫렸다고 생각하면 된다.

기밀성은 외부인이 데이터를 볼 수 없게 하는 원칙이고, 무결성은 데이터가 함부로 바뀌지 않도록 하는 것이다. 가용성은 필요할 때 데이터를 정상적으로 사용할 수 있게 하는 것이다.

주요 용어

  1. 취약점
    시스템의 약한부분
  2. 위협
    공격이 발생할 가능성
  3. 공격
    실제 피해를 발생시키는 행위

공격 분류

  1. 능동형 vs 수동형
    능동형 공격은 전송중인 데이터를 바꾸는 공격이다. (ex 스푸핑)
    수동형 공격은 데이터를 몰래 보는 공격이다. (ex 스니핑)
  2. 내부 vs 외부
    내부 공격은 팀 내부 사람이 정보를 유출하거나 시스템을 공격하는 경우이다. (ex 팀 내 스파이)
    외부 공격은 외부인이 취약점을 찾아 공격하는 경우이다. (ex 전광판 해킹 사건)
  3. 중간자 공격
    사용자 사이에 누군가 끼어들어 데이터가 이동되는 과정에서 정보를 보거나 바꾸는 공격이다.
  4. 치고빠지기 vs 지속공격
    치고 빠지기 공격은 짧은 시간 동안 공격하고 빠지는 방식이고, 지속 공격은 오랜 시간 동안 계속해서 공격하는 방식이다.
  5. 전수조사공격
    비밀번호처럼 가능한 경우의 수를 모두 시도하는 공격이다. (ex 0000부터 9999까지 전부 입력해보기)

해킹이란?

시스템 또는 네트워크의 취약점을 악용하여 정보를 탈취하거나 시스템을 장악하는 행위다. 단순히 HTML 같은 코드를 공격하는 것만이 아니라, 해킹에도 여러 종류와 수단이 있다.

해킹종류, 수단

  1. 악성코드
    소프트웨어적 공격 방식으로 대표적으로 랜섬웨어와 트로이 목마가 있다.
    랜섬웨어는 데이터를 잠그거나 암호화한 뒤 돈을 요구하는 공격이다.
    트로이 목마는 정상 프로그램처럼 보이지만 내부에 악성코드가 숨어 있는 방식이다. 예를 들어 스팸메일로 프로그램 설치를 유도하고, 설치했더니 악성코드가 실행되어 바탕화면에 웹페이지가 계속 뜨는 상황이 생길 수 있다.
  2. 피싱
    신뢰할수있는 기관으로 위장하여 정보를 빼내는 공격이다. (ex 스팸메일, 보이스피싱)
  3. 디도스공격
    과도한 트래픽을 발생시켜 서버를 마비시키는 공격이다. 사용자가 많아서 웹사이트가 터지는 것처럼, 의도적으로 요청을 계속 보내 서버가 정상적으로 동작하지 못하게 만드는 방식이다.
  4. 사회공학 공격
    사람의 실수나 심리를 이용하는 공격이다.
    (ex 원래는 파쇄해야 하는 문서를 그냥 버렸고, 공격자가 그 정보를 이용해 정보를 얻는 경우)
  5. 제로데이 공격
    일반적인 공격은 취약점이 알려져 있고, 개발자도 공격 사실을 인지해 바로 막으려고 대응할 수 있다.
    하지만 제로데이 공격은 개발자도 아직 알지 못한 취약점을 공격자가 먼저 악용하는 방식이다. 즉, 취약점이 공개되거나 패치되기 전에 발생하는 공격이다.

해킹 수단은 보통 하나씩만 일어나지 않고 여러 개가 복합적으로 일어나는 경우가 많다.


정보보안 대책

  1. 네트워크보안
    외부에서 함부로 접근하지 못하도록 네트워크단에서 막는 방식이다. (ex 테일스캐일, 방화벽)
  2. 단말보안
    내가 사용하는 기기 자체를 스스로 안전하게 관리하는 것이다. (ex usb, 알약)
  3. 데이터보안
    중요한 키, 데이터 등을 안전하게 지키는 것이다.
    (ex .env, 백업, chmod같은 접근권한 설정, 지문인식, otp)

크로스사이트스크립팅이 왜 위험한지?

크로스사이트스크립팅(xss)란 악의적으로 스크립트 코드를 웹에 삽입한 후, 그 코드가 실행되도록 만드는 공격이다.
JS는 웹에서 동작을 담당한다.
예를 들어 인풋에 친 값이 인풋 아래에 뜨는 구조라고 했을 때,

인풋 안에

<script>alert(document.cookie)</script> 

라던지

<script>alert("XSS 발생!")</script> 

같은 값을 넣었을 때

스크립트가 실행되거나 사용자의 쿠키값이 나온다면, XSS 취약점이 있는 웹사이트라는 뜻이다.

원래 인풋에 입력한 값은 스크립트로 작동되면 안 된다.

공격자가 스팸이나 피싱 링크를 조금만 바꿔도 사용자는 쉽게 알아채지 못할 수 있기 때문에 항상 조심해야 한다.

프론트엔드 개발자 입장에서도 리액트가 기본적으로 XSS를 어느 정도 방어해주긴 하지만, 그것만으로 충분하지 않다. 특히 쿠키의 경우 JavaScript로 접근하지 못하도록 HttpOnly 옵션을 설정하는 등 추가적으로 신경 써야 한다.

https를 왜 써야하는지?

HTTP는 데이터를 암호화하지 않고 주고받기 때문에, 중간에서 누군가 요청을 가로채면 아이디나 비밀번호 같은 정보가 그대로 노출될 수 있다.

반면 HTTPS는 데이터를 암호화해서 주고받기 때문에, 중간에서 데이터를 가로채더라도 내용을 쉽게 확인할 수 없다.


보안이라는 분야는 어느 상황 어느 코드를 방어할지 모르기때문에 특정 언어가 아닌 다 알아야하고 웹기술, 운영체제까지도 알아야한다고 느꼈다.

또한, 공격자는 하나의 취약점만 찾아내면 되지만, 방어하는 입장에서는 모든 취약점을 발견하고 없애야 한다. 그래서 기본적인 보안 개념을 아는 것은 필수라고 느꼈다.

해킹은 불법이기 때문에 모의해킹은 실제 서비스가 아닌 내 프로젝트나 실습 환경에서 해볼 예정이다. 해킹 문제도 풀어보면서 공격이 대충 어떤 방식으로 이루어지는지 익혀보려고 한다.

2개의 댓글

comment-user-thumbnail
2026년 4월 30일

b

1개의 답글