• 웹 해킹의 개념
웹 해킹은 웹 서버, 웹 애플리케이션, 웹 페이지 등에서 발생할 수 있는 보안 취약점을 악용하여 해커가 공격하는 것을 의미한다.
타 사용자의 권한, 세션 혹은 인증 우회 등을 통해 정보를 유출하거나 변조하는 등 해커의 목적에 따라 다양한 피해를 줄 수 있다.
웹 서비스는 다양한 정보가 저장되어 있고, 다수의 사용자들이 이용하기 때문에 해킹 대상으로 쉽게 노출되어 있다.
• 웹 해킹의 분류와 공격 방법
웹 해킹은 크게 Client-Side 공격과 Server-Side 공격으로 분류된다.
Client-Side 공격은 XSS, CSRF 등 공격을 통해 Session Hijacking, Cookie Poisoning, 타 사용자 권한 악용 등을 수행할 수 있다.
Server-Side 공격은 SQL Injection, SSRF 등 공격을 통해 DB 조작, 정보 탈취 및 변조, 서버 권한 악용 등을 수행할 수 있다.
• OWASP TOP 10
애플리케이션 보안을 연구하는 비영리 단체로, 취약점을 분석하여 공격 가능성과 기술 영향을 기준으로 상위 10개 취약점을 선정한다.
A01 : Broken Access Contorl
접근 제어란 각 사용자에게 맞는 권한이 부여되고, 그 권한을 벗어나면 사용자의 임의의 데이터 무단으로 접근 및 조작, 삭제 등을 할수 있다.
취약점 대응 방법
- 화이트 리스트 기반으로 공용 리소스를 제외하고 접근을 거부하는 정책을 수립
- 애플리케이션 전체에 일괄적으로 접근 제어 정책을 적용
A02 : Cryptographic Failures
암호화에 문제가 있거나 암호화 수준 등이 미흡할 경우 민감 데이터 노출이 발생할 수 있다.
취약점 대응 방법
- FTP, TELNET 등 암호화 기능이 없는 프로토콜 미사용
- 최신 버전의 암호화 프로토콜 및 안전한 암호 알고리즘 사용
- HTST 설정
- 암호화시 암호문이 고정되지 않도록 의사 난수 생성기 포함
- 신뢰할 수 있는 기관에서 발급한 인증서 사용
A03 : Injection
인젝션은 사용자가 전달한느 데이터를 임의의 데이터로 조작하여 서버나 브라우저 측에서 명령어나 쿼리문의 일부로 인식하게 만들 때 발생하는 취약점이다
취약점 대응 방법
- 사용자 입력값을 검증하고 SQL 쿼리문에서 사용되는 값은 Binding 변수를 사용하여 쿼리문이 실행되기 전에 파라미터화 시킴
- 서버 측에서 입력값에 대한 화이트리스트를 작성하여, 유효한 값만 사용하도록 함
- 적절한 인증 및 권한 관리를 수행하여 사용자가 입력한 쿼리문이나 명령어가 실행될 수 없도록 함
- ORM에서 발생할 수 있는 취약점에 대해 ORM 프레임워크에서 제공하는 보안 기능을 사용함
- LDAP 필터링을 사용하여 입력값을 검증하고, LDAP 서버에서 제공하는 검증 함수를 사용하여 보안성을 강화함
- JSP에서 EL 표현식을 사용할 때, HTML escaping과 입력값 검증을 수행하여 보안성을 강화함
- Struts2에서 OGNL을 사용할 때, 적절한 인증 및 권한 관리와 OGNL에서 제공하는 보안 기능을 사용하여 보안성을 강화함
A04 : Insecure
안전하지 않은 설계란 서비스의 기획과 설계 단계에서 발생하는 보안 취약점으로 기획 및 설계 단계에서 발생한 문제 코드 수정으로도 취약점 조치가 불가능 할 수 있다.
취약점 대응 방법
- 외부 의존성과 API 사용에 대한 보안 검토를 수행하고 소프트웨어 배포 및 운영 중 보안 이슈를 모니터링하여 발견 즉시 조치
- 소프트웨어 개발 시 보안을 설계의 일부로 고려하고 취약점 분석을 수행하여 보안성을 향상
- 보안 요구사항을 문서화하고 테스트 계획을 수립하며, 사용자 관리와 데이터 보호에 대한 보안 기술을 구현
A05 : Security Misconfiguration
보안 설정 오류는 애플리케이션 최초 설치 및 업데이트시 보안성을 고려하지 않은 설정으로 인해 취약점이 발생하는 경우로 설정과 관련된 모든 부분을 포함한 취약점
취약점 대응 방법
- 애플리케이션 설치 시 불필요한 기능, 구성 요소, 샘플, 문서 등은 제거
- 애플리케이션 보안 설정을 모든 환경에서 동일하게 구성 및 검증하고 자동화된 프로세스를 구현
- 보안 헤더 설정
- 기본 관리자 계정 사용
A06 : Vulnerable and Outdated Components
취약한 버전 또는 기술 지원이 중단된 소프트웨어를 지속적으로 사용하는 경우로 인해 발생할 수 있는 모든 보안 위협을 포함한 취약점
취약점 대응 방법
- 불필요한 소프트웨어는 제거하고, 운영체제와 소프트웨어의 최신 버전을 사용
- 형상 관리를 통해 사용하는 모든 소프트웨어 버전을 체크하고 패치 관리 프로세스를 수립하여 소프트웨어를 최신 버전으로 유지
- 알려진 취약점을 지속적으로 모니터링하여 취약한 소프트웨어 확인
A07 : Identifiction and Authentication
취약한 인증(Broken Authentication)과 식별 실패(Identification FAilures)를 통합, 사용자의 신원 확인과 인증 및 세션 관리에 오류가 있거나 미흡한 경우 발생하는 취약점
취약점 대응 방법
- Multi-factor 인증이나 2차 인증 구현
- 안전한 비밀번호 생성 정책 적용 및 인증 실패 횟수 제한 설정
- 인증 세션을 암호화된 채널에서 헤더를 통해 전송하고, URL에 인증 세션 ID를 노출시키지 않음
- 로그인 시 새로운 세션 ID를 생성하고 기존 세션 ID를 재사용하지 않도록 구현
- 적절한 세션 타임아웃과 로그아웃 시 세션 파기 정책을 수립하여 구현
A08 : Software and Data Integrity
소프트웨어 및 데이터 무결성 오류는 애플리케이션이 신뢰할 수 없는 소스, 저장소 및 CDN, 플러그인, 라이브러리, 모듈 등에 의존하는 경우 발생하며 안전하지 않은 CI/CD 파이프라인은 개발 및 배포 과정에서 애플리케이션이 변조될 수 있다
취약점 대응 방법
- 전자서명, 해시 알고리즘 등을 사용하여 애플리케이션 무결성을 검증하고, 사용하는 라이브러리가 신뢰할 수 있는 저장소에서 가져온것인지 확인
- 업데이트 공급망의 무결성 검증 절차를 수립하고 검증된 업데이트만을 배포
- CI/CD 파이프라인에 대한 정기적인 보안성 검토를 수행하여 무단 액세스, 악성 코드 또는 시스템 손상 가능성을 방지
- 직렬화/역직렬화 라이브러리를 사용하는 경우, 직렬화된 데이터에 대한 무결성 검증을 수행하여 조작 가능성을 방지
A09 : Secure Logging and Monitoring Failures
기존의 불충분한 로깅 및 모니터링에서 현재 항목으로 이름이 변경 됐으며 적절한 로깅과 모니터링이 불충분한 것을 떠나 존재하지 않을 경우 공격을 감지하고 대응할 수 없다
취약점 대응 방법
- 로그인, 로그인 실패, 가치가 높은 트랜잭션 등의 감사 가능한 이벤트가 기록되지 않는 경우
- 경고 및 오류가 부적절하거나 명확하지 않은 로그 메시지를 생성하는 경우
- 응용 프로그램 및 API의 로그가 의심스러운 활동에 대해 모니터링 되지 않은 경우
- 로그가 로컬에만 저장되는 경우
- 적절한 알림 임계값 및 응답 에스컬레이션 프로세스가 없거나 효과적이지 않은 경우
- 동적 애플리케이션 보안 테스트 도구에 의한 침투 테스트 및 스캔이 경고를 트리거하지 않는 경우
- 애플리케이션이 활성 공격을 실시간 또는 거의 실시간으로 감지, 에스컬레이션 또는 경고할 수 없는 경우
- 무단 변경 또는 삭제를 방지
A10 : Server-Side Request Forgery
애플리케이션이 사용자 제공 데이터를 적절한 검증 없이 로컬 및 원격 리소스를 가져와 취약점을 발생시키는 경우로 SSRF를 이용해 서버의 권한을 악용하여 서버가 조작된 요청을 수행하도록 할 수 있다
취약점 대응 방법
- 네트워크 계층에서는 별도의 네트워크에서 원격 리소스 액세스 기능 분할 및 "deny by default" 방화벽 정책 시행
- 애플리케이션 계층에서는 모든 클라이언트 제공 입력 데이터 삭제 및 유효성 검사, 포지티브 허용 목록 사용, HTTP 리다렉션 비활성화
'S-DEV > 웹 해킹 보안과 공격' 카테고리의 다른 글
Command Injection (0) | 2023.07.22 |
---|---|
XSS(Cross-Site Scripting) (0) | 2023.07.22 |
SQL Injection (0) | 2023.07.21 |