목록웹 보안 (5)
오래 못 할 짓 하지 않기
Cross Side Scripting 우선 용어부터 제대로 정리하고 가자Cross Side Scripting = 앞글자들만 따면 CSS 근데 이미 CSS라는 이름으로 한가닥 하는 놈이 있어서 XSS라고 바꿨다고 함. XSS 공격을 그림으로 본다면 다음과 같다. 예를 들어우리가 글을 포스팅할 수 있는 웹 사이트가 있다. 우리가 포스팅할 때는 다음과 같이 글을 쓸 것이다.이렇게 우리가 작성한 글이 HTML 형식으로 변환되어 들어가서 게시된다. 하지만 이 때 우리가 놓치는 점으로는 이 HTML 형식에 자바스크립트를 넣을 수 있다는 것이다. 어이가 없는 건 공격을 당해도 모른다고 한다. 즉 HTML에 자바스크립트를 넣어서 보내면 XSS 공격을 할 수 있다. 이렇게 해서 가져올 수 있는 정보로는 ● Fro..
Server side에서 사용자의 입력을 받아서 만들어지는 템플릿에 공격자가 원하는 정보를 얻기 위한 입력을 Injection 하는 것을 말한다. 다음과 같이 python 파일을 만들어보자 이를 실행했을 때 주소창에 ssti arguments로 들어오는 값을 template에 렌더링 해주는 결과가 나온다. 이는 우리가 보내는 정보를 바탕으로 명령어로 처리한 결과를 렌더링 해주는 것이기 때문에 아래와 같이 연산같은 기능도 해준다. 그렇다면 저기에 들어가는 게 연산이든 뭐든 명령을 넣으면 템플릿 엔진 stage에서 실행해준다는 의미가 된다. 공격자들은 분명히 이 점을 취약점으로 사용할 수 있다는 것이다. configuration을 가져오기 위해 config를 인자로 넣어보면 이렇게 웬만한 정보들을 뱉어준다...
SQL Injection이란 [ 코드 삽입 공격 ] 이라고 한다. SQL = DB에 있는 데이터를 처리하기 위한 언어이다. ● 하나의 서버에서 로그인 작업을 한다고 생각해보자. 1. 사용자가 [ ID / Password ] 를 입력 2. backend에서 SQL로 명령어를 날린다. [ 데이터 베이스에서 뒤 조건이 맞으면 관련된 정보를 다 줘 ▶ ID = ' 사용자가 입력한 ID ' AND Password = ' 사용자가 입력한 Password ' ] 3. 정보가 있을 시에는 그 계정과 관련된 데이터를 넘겨준다. 사용자 입력ID 에 hello 를 넣고 , 사용자 입력Password 에 123을 넣으면 id가 hello 이고, password가 123인 유저의 정보를 준다는 것임 공격자는 이 구조의 허점을 ..
보안의 3요소 1. 무결성 [ 권한을 가진 사람만 ] [ 정해진 방법 ] 으로 정보를 변경할 수 있어야 한다. ▶ 내 정보는 나만 수정 가능해야한다. > API로 값을 받아서 수정한다면 누구나 내 정보를 바꿀 수 있다. ex) http://infoEdit/id=minhyeok&&password=1234 이게 되면 망함 2. 기밀성 권한을 가진 사람만 정보에 접근할 수 있어야 한다. ex) 인스타그램 비공개 계정 팔로우 되어있는 사람만 접근 가능 * 수정은 불가능 = 기밀성과 무결성 둘 다 잡은 케이스 3. 가용성 (권한이 있을 때) 원할 때 정보에 대한 접근이 가능해야 한다. 접근성이라고 생각해도 됨 ex) 24시간 편의점은 가용성이 좋다. 암호의 개념 평문(plaintext) : 암호화되지 않은 데이터..
SQL문을 사용하여 DB에 대한 취약점에 접근하는 법으로 SQL문을 주입하고 실행되게 하여 비정상적으로 작동하게 하는 방법이다. 공격이 쉬운 편이고, 큰 피해를 입힐 수 있다. [ 로그인 관련 ] SELECT * FROM User WHERE id = 'hello_user1' AND password = '1q2w3e4r' (아이디 입력) (비밀번호 입력) 를 실행시켜서 where절 조건에 만족하는 정보가 있다? ▶ 로그인에 성공하는 것이 기존 방식이다. 우리가 ID는 알아내기가 쉽지만, 비밀번호를 알아내는 것이 어렵다. 하지만 ID만 알아도 해당 유저로 로그인 할 수 있다면 어떨까? 우리가 입력한 것을 Where절 id 와 password 칸에 넣고 그 입력을 토대로 SQL문을 실행한다. 그럼 id까지만 ..