on
웹 해킹 보안 완벽가이드 정리(1-4장)
웹 해킹 보안 완벽가이드 정리(1-4장)
2장. 핵심 방어 메커니즘
1. 사용자 접근처리
애플리케이션에서 필요로하는 주요 보안 요구사항은 결국 데이터나, 특정 기능에 대한 사용자의 불법적인 접근을 통제하는 것이 주다. 허용된 사용자가 정상적인 방법으로 특정 데이터 및 기능에 접근하는건 당연히 가능해야함. 하지만 불법적인 루트로 허용되지 않은 사용자가 접근하는 것은 막아야함.
1) 인증
대표적인 인증은 로그인 이 있음. 로그인은 예전부터 사용된 인증방법임. 보안이 올라가면서 로그인에서 발생할 수 있는 인증메커니즘이 고도화됨.
2) 세션관리
사용자를 위해 세션을 만들어주고, 만들어준 세션을 확인하는 용도로 토큰을 발행해줌. 세션 자체는 서버에 할당돼 있는 데이터임. 요게 많아지면 서버에 부하가 발생할수 있음. 보통 세션 토큰은 HTTP 쿠키를 사용해서 전송함.
요 세션 관리 메커니즘은 토큰에대한 의존도가 높음. 따라서 요 토큰이 만약 탈취되거나 그러면, 다른 사용자로 위장가능. 따라서 세션토큰을 사용하지 않고 사용자를 확인하는 다른방법들도 사용됨
3) 접근 통제
말그대로 접근을 통제하는 것임. 사용자 인증, 세션관리가 정상적으로 동작했다면, 서버에서는 사용자를 정상적으로 관리가 가능함. 따라서 사용자의 권한을 체킹하여 접근을 통제할 수 있음.
요런 게 접근통제로 볼수있음. 권한이 없음.
2. 사용자 입력 값 처리
사용자가 입력한 값을 안전하게 처리하는 것을 입력 값 검증이라고 함. 일단 사용자는 입력은 어떠한 값도 할 수 있음. 보안적인 측면이 들어가면 입력한 값을 어떻게 처리를 해서 공격자의 위협을 막는냐! 그 문제인거같음
1) 다양한 입력 값
사용자의 입력값을 검증하지 않는다면 아주 주옥됨. 따라서 애플리케이션에서 입력값의 엄격한 검증이 이루어져야함.
코드이그나이터 프레임워크에서 보면 form_validation 이라는 기능이 있음. 즉, 입력값을 검증할수 있는 라이브러리임. 주어진 조건에 부합하지 않는 입력값이 들어오면 저렇게 경고를 줌. 입력값에 대한 규칙을 통해 검사를 함.
또한 조심해야하는건, 애플리케이션은 사용자가 입력한 값 뿐만 아니라, 브라우저를 통해 전달되는 다양한 데이터 항목을 받아드림. 일반적인 사용자는 저 값들을 건드릴 필요가 없지만, 공격자는 이부분을 타겟으로하여 공격을 시도할 수도 있음. 히든필드값은게 바로 그런거임.
따라서 애플리케이션은 저러한 데이터들도 아주 세밀하게 검사해야함.
2) 입력 값 조작에 대한 처리방법
블랙리스트 알려진 문자열이나 특정 패턴을 포함하는 블랙리스트를 만들고, 해당 리스트에 걸리는 입력 값을 처리하는 방법이다. 하지만 해당 방법을 우회하는 루트는 매우 많다. 따라서 안좋음. select가 막히면 Select로 하면되고, or1=1— 가 막히면 or2=2—로 하면되고 요런식으로..ㅋ 또한 특정 키워드를 막는 필터가 있으면 수식 사이에 비표준 문자를 넣거나, 널바이트 공격을 이용할수 있음. C에서처럼 NULL 바이트를 만나면, 거기를 URL의 끝으로 인식하여 뒤에 로직을 필터링안하는 고런 방법도 있다고 함.
화이트리스트 요건 올바른 입력 값과 허용되는 문자열만 통과시키는 방법이다.
불순물 제거(Sanitization) 불안전한 데이터를 받아들일 필요가 있는 상황에서는 입력값이 페이지에 삽입되기 전에 HTML인코딩을 한다거나 하는 방식을 말한다
3. 확인문제
5. xss 공격을 차단하게 설계된 입력값 검증 메커니즘은 다음과 같다
발견되는 를 제거함 입력값을 50문자로 자른다 입력값에 포함되는 따옴표를 제거함 입력값을 URL 디코딩함 빠진항목이 있다면 1로 돌아감 ">