<CRS규칙 활성화>
1. URL Rewrite 모듈 설치:
* IIS URL Rewrite 모듈 다운로드
URL Rewrite Module 2.1 : https://www.iis.net/downloads/microsoft/url-rewrite
- 다음의 화면에서 Korean: x86 installer / x64 installer 중 x64 installer를 다운받습니다.
설치가 완성되면 다음과 같이 IIS ‘기능 보기’에서 설치된 내용을 확인할 수 있습니다.
정상적으로 설치된 모습입니다.
< URL Rewrite 모듈을 설치하는 이유> 1. HTTP를 HTTPS로 리디렉션 하기 위해 : URL Rewirte를 사용하면, URL에 쿼리 매개변수를 포함하지 않고도 깔끔한 구조로 변경하여 검색 엔진에서의 가독성을 높일 수 있다. 2. 사용자 친화적인 URL생성 : 복잡하고 긴 URL을 간단하고 의미 있는 URL로 변환할 수 있습니다. 예를 들어, example.com/products.php?id=123와 같은 URL을 example.com/products/123와 같이 간단하게 만들 수 있습니다 3. URL 보안 : 감한 정보나 특정 파일 경로를 노출하지 않기 위해 URL을 숨기거나 복잡하게 만들 수 있다. -> web.config 파일에서 태그 안에 URL Rewrite 규칙을 정의하여, 웹 애플리케이션의 특정 URL 패턴을 변경하거나 리디렉션하는 작업을 설정할 수 있습니다. |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
예시: 간단한 설정
Xml(web.config)
HTTP/1.1 301 Moved Permanently
- HTTP/1.1 301 Moved Permanently는 요청한 리소스가 영구적으로 새로운 위치로 이동했음을 의미한다.
- 여기서 응답에 포함된 Location 헤더가 https://192.168.111.10/board2/login2.php로 되어 있으므로, HTTP 프로토콜(HTTP)에서 HTTPS 프로토콜로 리디렉션되고 있음을 나타낸다.
-> 요약
사용자가 HTTP로 요청을 보내면, 서버는 301응답과 함께 HTTPS로의 새로운 URL을 안내한다.
클라이언트는 이 새로운 URL로 자동으로 요청을 재시도해야 하며, 이 과정은 보안 통신을 위한 HTTPS로의 전환을 돕는다.
-> 웹사이트는 더 안전한 연결을 제공하고, 사용자 데이터의 보안을 강화할 수 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
2. OWASP Core Rule Set (CRS) 다운로드 및 설정
CRS 다운로드 : 1. https://github.com/coreruleset/coreruleset/releases/tag/v4.6.0
ㅊㅊ
C:\Program Files\ModSecurity CRS에 압축을 해제
- modsecurity.conf 파일을 열어 수정
- CRS 규칙 포함 : modsecurity.conf 파일에 CRS 규칙을 포함시키는 설정을 추가합니다. 다음과 같은 내용으로 파일을 수정 ( CRS 파일 경로는 CRS를 다운로드하여 압축해제한 경로에 맞게 수정)
<IIS URL Rewrite 모듈 설정>
1. URL Rewrite 규칙 추가:
URL Rewrite 모듈을 선택하고, 새 규칙을 추가합니다.
규칙 이름: 예를 들어, ModSecurity.
조건: 조건 없이 기본값으로 사용합니다.
동작: Rewrite를 선택하고, URL에 ModSecurity의 설정 파일 경로를 지정
2. web.config 파일 수정:
웹 애플리케이션의 web.config 파일에 URL Rewrite 규칙을 추가합니다. 위의 XML 코드를 웹 애플리케이션의 web.config 파일에 포함
3. IIS 재시작
-> 안 들어가진다. (SSL이랑 TLS가 없기 때문)
OWASP ZAP을 동작시켜 로그파일이 잘 기록되는지 확인
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
PHP.ini 파일 설정 (추가적인 방법)
- PHP의 전역 설정 파일인 php.ini 파일을 통해 쿠키에 HTTPOnly 플래그를 기본적으로 설정할 수 있습니다.
- 이 설정은 PHP 세션 쿠키에 기본적으로 HTTPOnly 플래그를 추가합니다.
HTTPS를 사용하는 경우 cookie_secure도 활성화하는 것이 좋습니다.
session.cookie_httponly = 1
session.cookie_secure = 1 ; HTTPS 사용 시 권장
php.ini (보안강화)-------------------------------------------------
session.use_strict_mode = 0 ;비활성상태 ;--> 수정한 부분: PHP는 세션 ID가 유효한지 확인 ;-->세션이 새로 시작될 때만 세션 ID를 허용. 세션 하이재킹 방어 session.use_strict_mode = 1 ; 세션 쿠키의 유효 기간을 1시간으로 설정 session.cookie_lifetime = 3600 ; 쿠키의 유효 경로를 사이트 전체로 설정 session.cookie_path = / ; 쿠키의 유효 도메인을 example.com으로 설정. 여기부분은 현재 도메인이 없으므로 설정하지 않는다. session.cookie_domain = example.com ; 쿠키가 HTTPS에서만 전송되도록 설정 session.cookie_secure = 1 ; JavaScript에서 쿠키 접근 차단 session.cookie_httponly = 1 ; SameSite 속성을 Strict로 설정 session.cookie_samesite = Strict |
< IIS의 web.config 파일에서 HttpOnly 플래그와 CSP설정, HTTP 응답 헤더 rewrite 규칙 추가하기 >
SSL/TLS를 설치하지 않았으므로 web.config 파일에 HTTPOnly 플래그만 적용하고 Secure는 적용하지 않기로 하고, CSP설정과 HTTP 응답 헤더 rewrite 규칙 추가를 추가하여 다음과 같이 web.config를 완성합니다.
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <!-- HTTP 압축 설정 --> <httpCompression> <dynamicTypes> <add mimeType="text/" enabled="true"/> </dynamicTypes> <staticTypes> <add mimeType="text/" enabled="true"/> </staticTypes> </httpCompression> <!-- MIME 타입 설정 --> <staticContent> <mimeMap fileExtension=".json" mimeType="application/json"/> </staticContent> <!-- Content Security Policy (CSP) 설정 --> <httpProtocol> <customHeaders> <add name="Content-Security-Policy" value="default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com https://code.getmdl.io; style-src 'self' https://cdnjs.cloudflare.com https://code.getmdl.io; img-src 'self';"/> </customHeaders> </httpProtocol> <!-- HTTP 헤더 리라이트 규칙 --> <rewrite> <outboundRules> <rule name="Add HttpOnly" enabled="true" stopProcessing="true"> <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)"/> <action type="Rewrite" value="{R:1}; HttpOnly"/> </rule> </outboundRules> </rewrite> </system.webServer> </configuration> |
다음은 web.config에 HTTP 압축 활성화, MIME 타입 설정, CSP설정, HTTP 응답 헤더 rewrite헤더 규칙 추가 등이 포함된 내용입니다. 다음과 같이 작성하고 저장합니다.
URL Rewrite적용 여부 확인:
rewrite가 적용되고 있는지 확인하기 위하여 해당사이트에 접속한 후 F12(개발자모드) > application 탭에서 다음의 내용을 확인합니다. 아래 그림에서 HttpOnly가 체크가 되어 있으면 반영된 것으로 확인된 것입니다.
CRS(Core Rule Set)와 URL Rewrite 모듈을 함께 사용하는 이유? < 웹 애플리케이션 방화벽(WAF) 기능과 URL 패턴 관리 기능이 서로 밀접하게 관련되어 있기 때문> 1. URL Rewrite 모듈 - URL 구조를 표준화/재작성 WAF가 요청을 더 효율적으로 분석 2. URL Rewrite는 들어오는 HTTP 요청에 대해 미리 전처리를 해주기 때문에 CRS가 요청을 분석하고 규칙을 적용하는 과정에서 요청의 구조가 일정하게 유지된다. > URL Rewrite 모듈을 먼저 설치하고 설정한 후에, CRS 규칙을 활성화하는 것이 일반적인 권장 사항 |
owasp zap설정하기
< "Missing Anti-clickjacking Header" 오류>
: 웹 애플리케이션에서 클릭재킹(clickjacking) 공격을 방지하기 위한 HTTP 응답 헤더가 설정되지 않았다는 것을 의미
header("X-Frame-Options: DENY"); 이 설정은 브라우저가 현재 페이지를 iframe 내에 표시하지 못하도록 하여 클릭재킹 공격을 방지합니다.
< Application Error Disclosure 오류>
: 웹 애플리케이션에서 내부 오류 정보를 사용자에게 그대로 노출하는 것을 의미
-> 사용자에게는 간단한 메시지를 제공하고, 상세한 오류 정보는 숨기는 사용자 정의 오류 페이지를 생성
-> 오류 메시지를 숨기고, 로그 파일에 기록하며, 사용자 정의 오류 페이지를 사용
<Absence of Anti-CSRF Tokens 오류>
: 웹 애플리케이션이 CSRF(Cross-Site Request Forgery) 공격에 취약
(login2.php)
-> CSRF 토큰을 생성하고, 폼에 추가
-> 로그인에 성공한 후, 세션을 유지하면서 새로운 CSRF 토큰을 생성
-> $_POST['csrf_token']과 세션에 저장된 $_SESSION['csrf_token'] 값을 비교하여 요청의 유효성을 확인
(register2.php)
CSRF 토큰 생성 및 세션 저장: 세션에 유일한 CSRF 토큰을 생성하고 저장
폼에 CSRF 토큰 추가: 폼에 숨겨진 필드로 CSRF 토큰을 포함
토큰 검증: CSRF 토큰이 세션에 저장된 토큰과 일치하는지 확인
'보안을 강화한 시큐어코딩 웹게시판 (windows)' 카테고리의 다른 글
추가 보안 후 owasp-zap 실행 (0) | 2024.09.23 |
---|---|
추가 보안 설정 ( IIS에서 TRACE, PUT,DELETE 비활성화),(IIS에서 XSS 공격 방지),(WAF사용) (0) | 2024.09.11 |
OWASP ZAP (0) | 2024.09.11 |
보안을 강화한 시큐어 코딩 (0) | 2024.09.06 |