버그 바운티로 취약점 분석 가능 (버그바운티 일정 확인 후 신청해볼것)
적절한 분류, 우선순위 설정, 취약점 관리 단계가 이뤄져야한다
(취약점 분석)
링크 1
초기에 발생가능한 위험에 대해 분석할 수 있음
중간자 공격을 막기위해 고안.
(MITM) :
강의 1
SSL : 보안 소켓 계층
SSL 2.0 3.0
TLS : 전송 계층 보안
TLS 1.0 1.1 1.2 1.3
비밀번호 해싱을 위한 해싱 함수
해싱함수를 사용하는 이유는 본래 패스워드는
BCrypt
작동 원리 :
1. 비밀번호에 솔트(계산 전에 비밀번호에 추가되는 임의의 데이터)를 추가해 결합
2. 해시 계산의 반복 횟수를 높여 비용인자 값 증가
3. 결합된 값과 솔트, 비용 인자를 사용해 해시값 생성
CBC 모드로 작동 : 블록 암호화 모드 / 블록이 암호화될떄 이전 블록의 암호화 결과를 사용하는 방식.. (XOR 방식을 사용)
PBKDF2
작동 원리
1. 비번과 솔트 결합
2. 해시함수를 사용해 반복 계산
3. 원하는 길이의 키 생성. 해당 키로 암호화 or 인증에 사용
SHA-1, SHA-256 등 사용
근래에는 Argon2와 같은 새로운 해시 함수가 개발
Argon2
: 메모리 하드 함수로 설계됨
메모리 하드 함수 : 해시 계산 시 많은 메모리를 필요로 함
그로인해 공격자가 고성능 하드웨어를 사용하더라도 비밀번호를 추측하거나 크래킹하는 것을 어렵게 만듦
작동원리
1. 지정된 크기의 메모리를 할당(해시 계산에 사용될 블록 저장)
2. 할당된 메모리 블록을 반복적으로 접근, 각 블록은 이전 블록의 값에 의존
3. 최종 접근이 완료시 최종 해시값 계산(입력 비번과 솔트값의 해시 결과값)
코드 기능 리뷰와 코드 보안 리뷰의 차이점
:기능 사양에 부합하며 사용성 버그를 포함하지 않음을 확인
: XSS, CSRF, 인젝션등 공통 취약점 확인 및 자동화된 도구나 스캐너로는 찾아내기 힘든 논리 수준의 취약점을 확인
애플리케이션에서 가장 위험한 컴포넌트부터 시작하는 것이 이상적임
ex) 사용자 인증 및 세션, db 인터페이스, 입력검증, 네트워크 통신 etc..
but 실제로는
1. 클라이언트에서 서버로 요청하는 곳에서 시작
클라이언트가 호출하는 서버 API로 이동
헬퍼 메소드, 의존성, API들이 의존하는 기능성 등을 확인
클라이언트엔 노출되지만 직접적으로는 호출되지 않은 기능 확인
=> y? 외부를 잘 이해할 수 있기 때문 + 클라이언트, 서버간의 어떤 유형의 데이터가 상호 작용하는지도 알 수 있음
: 보안에 취약한 코드 작성 방식
: 임시적, 불완전한 보안 솔루션의 예시
ex) SQL 인젝션 방지, XSS 방지, IP 차단, 포트 차단, 사용자 차단, 스팸 필터링
장점
: 특정 요소를 명시적으로 차단할 수 있어 관리가 비교적 간편함
: 어떤 요소가 금지되었는지 명확함
단점
: 목록이 커질수록 관리가 어려워짐
: 우회의 가능성이 있음
: 유지 보수성이 떨어짐
보안측면에선 거부 목록 보단 허용 목록을 더 선호함
: 소프트웨어 개발에서 반복적으로 자주 사용되는 코드 구조나 패턴을 의미함
즉, 재사용..
=> 생산성 향상과 일관성의 이점이 있지만, 개발자가 프레임워크의 추상화를 이해하지못한 경우, 보안 메커니즘에 문제가 생길수 있음..
: 로깅 디스크 기록, 데이터베이스 작업을 위한 퍼미션을 각각 생성해야함.
각 모듈 당 자체적인 사용자를 통해 실행 + 특정 작업 수행에 필요한 기능한 사용할수 있게 퍼미션 설정
: 클/서버 애플리케이션 코드가 너무 강하게 결합되어 둘 중 하나가 없으면 기능을 할수 없을때 발생
모놀리식 애플리케이션* : 애플리케이션의 모든 기능과 컴포넌트가 단일 코드베이스와 단일 실행 환경에서 동작하는 구조
ex) 전자상거래
안전한 애플리케이션은 클라이언트 / 서버가
1. 독립적 개발
2. 미리 정의된 데이터 포맷과 네트워크 프로토콜을 통해 네트워크상에서 통신
=> 공통적인 취약점 & 구성 오류를 찾는데 좋음
: 좋은 보안 소프트웨어는 개발 수명 주기 프로세스에서는 웹 애플리케이션의 취약점을 획득 분류 해결 하는 절차가 잘 정의됨
동작 방식
1. 사용자가 텍스트를 UI에 입력
2. 텍스트를 DOM에 추가 시도
3-1. 텍스트로 추가 => 안전
3-2. DOM으로 추가 => 침해
DOM 으로 전달하는 것이 아닌 텍스트로 전달해야한다..
JSON.parse() : 텍스트를 json 객체로 변환할때 사용 / 문자열과 숫자인지 여부를 검사할수 있음
+@ 사용자의 데이터를 DOM 에 주입할때, innerHTML innerText를 사용
innerText : HTML 태그를 자체적으로 정제 후 문자열로 출력
innerHTML : HTML 태그로 해석 후 DOM 출력
둘중 innerText를 사용하는 것을 추천하지만/ 100프로 안전은 아님
when?
=> 특정 태그를 허용하고 이외는 차단할때
'<'a href="javascript:alert(document.cookie)">test'</a'>
=> URL 스킴 : 스크립트 태그나 따옴표 없이 문자열 실행 허용
'<'a href="javascript:alert(String.fromCharCpde(88,83,83))">test'</a'>
=> 따옴표 필터도 우회 가능
예시
: 문자열을 DOM으로 파싱하는 데 사용되는 웹 API
주로 XML이나 HTML 문자열을 파싱하여 브라우저가 이해할 수 있는 DOM 구조로 변환하는 데 사용함
=> 주의점으로는 사용자 입력을 파싱할 때는 신뢰할 수 없는 데이터를 그대로 파싱 가능성이 있기때문에 주의
밑 두개로 구성을 조직화하면 위험을 낮출수 있다
document.createElement()
: 새로운 HTML 요소를 생성할때 사용함
document.appendChild(child)
: 부모-자식 구조로 노드 구성해줌
=> 개발자는 DOM 구조와 태그명 통제 / 페이로드 내용 통제
장점
단점
: 주로 파일을 읽거나 다운로드하는 데 사용함
장점
단점
CSP: Content Security Policy, 브라우저의 보안 구성 도구
: img 태그와 a 태그등을 사용해 공격 가능,
referer : 모든 요청에서 확인 가능
(erl=noreferer 설정시 referer 헤더 X)
origin : HTTP POST 에서만 전송
두 헤더가 모두 있어야 표준에 맞음
인증 토큰임 , 상태 저장과 상태 비저장 (stateful stateless) 일때랑 동작/인증 방식이 약간 다름
상태 저장
클라이언트 웹 페이지 요청 -> 서버=>클, CSRF 토큰을 함께 전송 -> 클, HTTP 리소스 요청시 CSRF 토큰을 같이 전송 -> 서버, 토큰 검증 후 응답 전송
=> 이후에 공격자가 접근시 토큰이 없기때문에 요청이 차단됨
상태 비저장 GET 요청을 리팩토링
: HTTP GET 요청은 서버 측 상태를 저장 or 수정 X
: 상태 저장 은 X
애플리케이션 차원의 CSRF 방어 구현(토큰 사용, 헤더 검사)
미들웨어의 도입
: 클라이언트로부터 들어오는 요청을 가로채 처리와 응답을 생성하기 전에 다양한 작업을 수행이 가능함 => 라우트에 의해 수행되기 전에 먼저 실행 가능
즉, 모든 서버의 요청에 대해 호출 가능 및 특정 요청이 있을때 실행가능하게 할수 있음
언어의 종류와 파서에 따라 XXE 비활성화하는 구성이 기본값일 수도 있음
=> 확인 방법? => API 문서 확인
동작 예시
XXE 포함, XML 페이로드 요청 -> 서버의 파서가 XML 파싱
-> (부적절한 구성) 서버 리소스가 액세스되면 반사될 가능성 있음
-> (적절한 구성) 파서가 엔티티 태그를 거부
XML 과 JSON 의 비교
랜더링은 XML이 이상적 BUT API에는 JSON이 이상적
XML의 보안 위험 외부 파일 & 멀티미디어 포함하기 때문 => 안정성 떨어짐
(리마인드.. XXE는 원격 서버의 내부 파일을 읽거나, 서버 내부의 데이터를 탈취하거나, 원격 서버에서 원하지 않는 코드가 실행되게 하는 공격
XML 파서가 외부 엔터티를 허용 -> 악성 XML 입력 -> 서버 내부 파일 읽기 -> 데이터 탈취 또는 추가 공격)
서버는 여러개의 DB를 사용하는 경우가 많다
=> 질의는 일반적으로 많이 사용하는 질의를 사용하는것을 추천
일반적 SQL 질의?
=> 조회, 삽입, 업데이트, 삭제 등등
EX) SELECET, WHERE, ORDER BY..ETC
DSL 을 사용하는 경우도 있
(도메인별 언어)
프리페어드 스테이트먼트?
=> 사용자 제공 데이터가 SQL 해석기에 나타나기도전에 의도가 미리 새겨짐 그로인해 질의 자체를 변경하는 것이 불가능
장점
최소 권한 원칙(최소 특권 원칙)
명령 허용 목록
=> 쉽게 말해 블랙리스트 보단 화이트리스트 방식을 사용
+@
입력 검증, 원시 쿼리 사용 지양, 최신 보안 패치적용...
DoS의 공격의 결과
위협 모델링, 코드 검토 및 테스트, 방어적 프로그래밍..
블랙홀
단점
사용자가 애플리케이션 리소스를 장시간 점유하지 못하게 구성하는 것만으로도 예방이 가능