[기초 공부] 웹 공격과 방어

백현우·2023년 11월 28일
0

영상 후기

목록 보기
64/67

movie

파라미터 변조 공격

  • 파라미터 변조 공격이란, 파라미터를 악의적으로 변조하여 다른 값을 보내서 권한 및 자격을 상승시키거나, 전자상거래에서의 가격, 수량 등 주문 정보 등의 데이터를 조각하기 위해 클라이언트와 서버간에 교환되는 파라미터의 조작을 기반으로 하는 공격 방법이다.

  • 가격과 같은 변해서는 안되는 값들은 프론트에서 실어보내지 않고, 서버 자체에서 결정되어서 사용하면 막을수 있고, 권한 문제도 특정 유저의 권한은 서버측에서 그때그때 부여하도록 해놓아야 하고, 유저의 인덱스 값도 숫자/문자 와 같이 쉽게 접근할수 있는것이 아닌, 해시값 등으로 처리하면 공격자가 임의로 예측하지 못하게 할 수 있다.
    서버에서 매번 인증정보의 무결성을 체크하면 더욱 좋고, 특정 아이피에서 여러 값을 넣어보면서 접근하는 등 수상한 시도를 감지해서 차단하는 기능도 필요할 것이다.

XSS 공격

  • XSS공격이란 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다.

  • 해결 방법으로는 게시글 내용에서 이런 스크립트를 실행 안되도록 막고, 이런 스크립트 자체가 서버 데이터베이스에 저장 안되게 막거나, 서버에 들어오는 요청들 중에 위험한 요소들을 걸러주는 XSS 필터같은 것을 설정해서 안전한 값만 받게 해야한다.
    태그를 전부 다른 문자로 치환해버리는 방법도 있지만, 그렇데되면 html 요소를 게시물에서 쓸수 없어지니 전문가들에게 검증받은 화이트리스트 라이브러리를 쓰면 그럭저럭 안전한 게시판을 구현할수 있을것이다. 또한 사용자 정보가 담긴 쿠키는 HttpOnly 속성을 걸어 자바스크립트로는 접근하지 못하게 해야한다.

SQL 인젝션

  • SQL 인젝션은 웹사이트의 취약점을 찾아, DB를 관리하는 SQL명령어에 악성코드를 삽입해 해커가 원하는 식으로 조작하는 웹 해킹 공격이다.

  • 해결 방법으로는 SQL문에 인자로 들어갈 모든 값들을 철저히 검증하고, 사용자가 절대 인자값을 직접 작성할 수 없게 해야한다.
    프론트단에서 먼저 자바스크립트로 입력값을 필터링한 다음, 서버단에서도 다시 걸러내고 나서 SQL문에 넣어야 한다.

    데이터베이스마다 문법도 기능도 다르기 때문에 어설프게 막는것보단, 사용하는 언어나 프레임워크마다 데이터베이스 다루는데 쓰이는 권장하는 방식들이 있으니 그런 가이드라인을 따라 DB를 사용하는것이 제일 안전하겠다.

    일부러 잘못된 SQL문이 실행되게 한 후, 오류 내용을 보고 DB구조를 파악하려는 사람도 있기 때문에 에러 페이지를 따로 두는것도 중요하다.

비밀번호 저장법

  • 비밀번호를 평문으로 저장하면 일단 개인정보 보호법을 위반한 것이 된다.
    평문으로 저장한다면 데이터베이스를 한번 털리면 모든 사용자의 비밀번호가 유출되는 것이다.

  • 해결방법으로는 비밀번호를 해싱,솔팅 해서 저장해야 한다.
    해싱이란, 어떤 값에 대해 고정된 다른 값이 나오도록 하는것이다. 예를들면 X를 넣으면 X1X2X3X4가 나오는건 계산할수 있지만 반대로 어떤 값을 넣어야 X1X2X3X4가 나오는지는 계산되지 않는것이다.
    하지만 해싱 하나만으론 안전하지 않을수 있는데, 웬만한 해커들은 어떤 값이 어떤값으로 해싱되는지 데이터를 가지고 있다. 이것을 레인보우 테이블이라고 한다. 그래서 솔팅을 해야하는데, 사용자 비밀번호를 그대로 해싱하지 않고, 가입할때마다 랜덤으로 나오는 값을 비밀번호와 합쳐 해싱하고, 결과값과 솔트를 사용자 테이블에 같이 입력해두는 것이다.

0개의 댓글

관련 채용 정보