(1) 보안(1)

Bonggus·2021년 1월 5일
0

보안

목록 보기
1/2
post-thumbnail

웹개발을 시작한지 1년이 조금 넘은것 같다. 아는것 같은데 여전히 잘 모르겠고, 모르면 또 공부해야 한다. 개발자의 숙명인듯하다. 그 중 보안의 영역은 개발하면서 생각조차도 안해본 영역이다.

중요하다는 말은 들어봤지만, 정작 중요성은 못느끼는 부분이었는데, 이번에 결제시스템을 만들게되면서 자연스럽게 관심이 가기 시작했다. 그래서 차근차근 정리를 좀 해보기로했다.

근데 어느부분부터 공부를 해야하는걸까? 일단 대략적인 개념과 방향성을 잡아봐야겠다.

0. 보안이란뭘까?

먼저 생활코딩에 들어가기전에 가볍게 네이버 국어사전을 찾아보았다. "음~그렇구나!"라는 느낌정도다.
네이버 국어사전

위키를 찾아봤다.

위키백과

네이버 국어사전보단 도움이 됐는데, 내가 중요하게 생각한 부분은 '방지'라는 단어이다. 그래서 방지의 뜻을 찾아보았다.

조금 정리해보면,

보안은 위험, 손실 및 범죄가 발생하지 않도록 (사전에) 막는 것.

정도가 되겠다.

그렇다면 웹 개발을 할 때 발생할 수있는 위험, 손실, 범죄는 무엇이 있을까?
개발자의 퇴사

라는 질문을 남기고 생활코딩을 시청.

어떻게 공부할까

마침 유투브에 동빈나님이 올린 "해킹 및 정보보안 공부 방법, 공부 순서 정리 (생기초부터 최신 논문 읽는 방법까지)" 영상을 발견했고, 이걸 보면서 방향성을 잡아야 겠다(좋은 정보 감사합니다).

사실 보안에 대한 내용만 기대하고 영상을 켰는데, 시작부터 해킹에 대한 이야기이다. 왜그럴까 생각해보며 영상을 보기 시작했다. (아마도?) 해킹과 보안은 한몸 인것인가? 결국 공격을 할 수 있으면 방어까지 생각해 볼 수 있기 때문이지 않을까. 결국 적을알고 나를알면 백전백승같은...그런 느낌일까?

해킹이란? 기존의 존재하는 시스템을 내가 원하는 방향으로 시스템을 바꾸는 작업을 의미한다. 시스템의 존재 목적대로 사용하는게 아니라, 내가 원하는 방향으로 바꾸는 것을 의미한다. 쉽게 말하면 내가 얻고자 하는 것을 위해 잔꾀를 부리는 것을 의미한다. 해킹이 문제가 되는 것은 시스템을 바꾸는 작업에서 불법적인 요소(허용되는 범위를 넘어가는)가 들어갈 때이다.

해킹의 목적 자체는 분명한데, 경우에 따라 문제가 된다. 해킹은 공격과 방어로 나뉘어진다. 공격과 방어는 뿌리가 같기 때문에 해킹을 공부한다는 것 자체가 방어, 즉 보안을 공부하는 것이라고 생각해도 된다.

1. 프로그래밍 언어

웹 해킹, 시스템 해킹 상관없지 프로그래밍 언어에 대한 이해가 있어야 한다. 처음엔 쉬운 언어부터 시작을 하게 좋다(python 추천). 그 다음에 C/C++을 공부하는게 좋다.

2. 웹 해킹

웹해킹의 경우 해킹 루트가 다양하다. 웹서비스를 운영하는 서버 자체를 공격하는 경우와 서비스를 사용하는 사용자를 공격 할 수도 있다. 프로그래밍 언어를 공부하고 웹해킹을 공부하면 접근/공부가 수월하다. 웹해킹은 HTML, JS(JavaScript)를 공부하는게 중요하다. 웹사이트 처리 로직은 JS가 담당한다.

웹 해킹은 강좌를 찾아보고, OWASP를 통해 공지되는 가장 위험한 웹 취약점을 확인하고 공부하는게 좋다. 또한 행안부에서 제공하는 시큐어코드 가이드를 보는것도 도움이 된다.

또한 실질적으로 서버 동작하기 만들어주는 PHP, JSP, Nodejs 등을 공부해보는것이 좋다. 서버 프로그래밍언어를 공부해도 웹 취약점은 동일하게 적용되기 떄문에 어던 언어를 공부해도 상관없다. 웹프로토콜, 크라이언트/서버가 어떻게 정보를 주고받는지를 이해하는게 중요하다.

wargame.kr을 통해 문제를 해결해보는 것도 좋다.

3. 네트워트 해킹

네트워트 해킹의 단계로 넘어왔으면 이미 웹해킹의 단계를 넘었기 때문에 클라이언트와 서버가 데이터를 주고받을 때 어떤 취약점이 발생하는지 파악했을 것이다.

네트워트 해킹을 이해하기 위해서 Socket 프로그래밍이다. 또한 OSI 7계층에 대해 공부하면 좋다. OSI 7계층으 통해 데이터가 어떻게 움직이는지 더 깊게 이해할 수 있다.

ARP Spoofing(pcap)은 소켓프로그래밍이나 OSI 7계층의 이해를 도와준다. 또한 깊게 갈수도 수학 베이스의 지식이 필요할 수도 있다(정수론). 수학 베이스가 있다면 RSA암호에 대해 공부해보는 것도 도움이 된다.

4. 시스템 해킹

시스템 해킹을 위해선 컴퓨터 구조, 운영체제에 대한 이해가 필요하다. 그리고 리눅스를 공부해보는 것도 좋다. BoF, Fuzzing, 메모리해킹, 동적분석, 역어셈블러 등을 공부해 보는 것도 좋다(대체 무슨말인지...).

5. 해킹방어대회 (CTF)

  • CTF
  • 동아리(기관에서 운영하는 BoB, K-shield ...)

6. 심화

주변에서 보이는 각종 취약점에 대해 공부해보는 것이 좋다. 최신 공격방법, 그 공격방법을 막는 방어 방법에 대해 찾아보며 공부해야 한다(대체로 영어자료). 보안관련 컨퍼런스에서 소개된 논문을 찾아보는게 좋다. 논문은 구글 학술검색에서 관련 검색어를 검색해 찾아보면 된다.

음?

보기만해도 어렵다. 단지 공부방법이나 순서에 대한 설명을 듣기만 한건데, 이해하기 어려운 내용이 수두룩하다. 일단 해킹이나 보안에 대한 전반적인 부분에 대해 조금더 찾아봐야겠다.

그다음 내가 하는일에 관련된 부분부터 공부해야 빠르게 적용 가능할테니 웹 해킹, 보안 관련해서 먼저 공부해 보는게 좋겠다.

참고자료

해킹 및 정보보안 공부 방법, 공부 순서 정리 (생기초부터 최신 논문 읽는 방법까지)

profile
프론트엔드

0개의 댓글