아직은 잠이 안와
article thumbnail
OWASP[Open Web Application Security Project] - 오픈소스 웹 어플리케이션 보안 프로젝트 

3~4년마다 갱신되는 10대 웹 애플리케이션의 취약점 Top 10 

 

Injection

- SQL, OS, NoSQL, LDAP 인젝션 취약점은 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분이 인터프리터로 보내질 때 발생 

- 공격자의 악의적인 데이터는 예상하지 못하는 명령을 실행하거나 적절한 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있음

 

SQL injection

  - 매우 일반적으로 발견되는 취약점

  - SQL 스트링 입력에 대한 사용자의 입력이 올바른 지를 검증하지 않는 데서 비롯

  - SQL의 특수문자를 사용해서 공격

  => DB에 대한 사용자 입력을 검증하고 유효하지 않은 입력은 거절

  => 해당 IP주소를 블랙 리스트에 추가 

Broken Authentication

- 인증과 세션관리에 관련된 애플리케이션의 비정상적인 동작으로 인해 패스워드, 키, 세션 토큰 및 사용자 도용과 같은 취약점을 발생시킨다 

Sensitive Data Exposure

- 민감한 정보 노출, 많은 웹 애플리케이션 및 API가 의료 및 건강정보, 금융정보 등 민감정보를 제대로 보호하지 않기 때문에 개인정보 유출이 발생

- 추가적인 보호 없이 중요한 데이터가 손상될 수 있음 

XML External Entities(XXE)

- 외부 개체는 파일 URI 핸들러, 내부 파일 공유, 포트 검색, 원격 코드 실행 및 서비스 거부 공격을 사용하여 내부 파일 노출 

Broken Access Control

- 인증된 사용자가 수행할 수 있는 작업에 대한 제한이 제대로 적용되지 않는 경우 발생. 

- 공격자는 결함을 이용해 다른 사용자의 계정에 엑세스하거나 중요한 파일을 보거나, 데이터를 수정하고 접근 권한을 변경할 수 있음

Security Misconfiguration 

- 가장 흔한 이슈, 민감한 정보가 안전하지 않은 디폴트 설정이나 불안정하거나 ad hoc 설정, 잘못된 HTTP 헤더 설정 등의 결과로 이 오류가 나타남

- 기본 설정은 안전하지 않기 때문에 항상 최적화가 되어야 하고 최신 버전으로 관리되어야 한다 

Cross-Site Scripting(XSS)

- 신뢰할 수 없는 외부값을 적절한 검증 없이 웹 브라우저로 전송하는 경우 발생되는 취약점 

- 사용자 세션을 가로채거나 홈페이지 변조, 악의적인 사이트 이동 등의 공격 수행 가능 

  - JavaScript 코드를 외부 소스에서 안전하지 않은 웹사이트로 주입

  - 다른 클라이언트가 해당 코드를 서버에서 받아 실행시 공격이 수행

  - 클라이언트가 주 공격 대상

 

- Cross-site request forgery (CSRF)

  - XSS와 유사하지만 서버를 공격 대상으로 하는 것이 다름

  - 브라우저 대신 기능을 수행

  - 목표 브라우저가 외부 웹사이트에 요청을 보내도록 함 

  - 클라이언트를 이용해 서버 또는 외부 사이트가 공격 대상 

Insecure Deserialization

- 불안전한 역직렬화는 종종 원격코드 실행의 결과를 만듦.

- 원격코드 실행의 결과를 못만들더라도 재생, 인젝션, 권한상승 공격을 수행하는데 사용 가능

Using Components with Known Vulnerabilities 

- 취약한 컴포넌트를 이용해 공격하는 경우 심각한 데이터 손실이 발생하거나 서버가 장악 됨

- 알려진 취약점이 있는 구성요소를 사용하는 애플리케이션과 API는 애플리케이션을 약화시키고 다양한 공격과 영향을 줌 

Insufficient Logging & Monitoring

- 불충분한 로깅 및 모니터링은 사고 대응의 누락 또는 비효율적인 통합과 함께 공격자가 시스템을 더 공격할 수 있다.

- 지속적으로 유지되면 더 많은 시스템으로 피봇하고 데이터를 변조, 추출 또는 파괴할 수 있다. 

 

Information Leagkage

 - 민감한 정보가 Web을 통해 유출 될 수 있음

 - Web directory에서 접속 가능한 모든 파일들은 GET 메소드를 통해 다운로드 가능

  ex 1)

   - http://www.website.com/secret.jpg  | 직접 접속 가능 

   - http://www.website.com/index.html | 그림 파일에 대한 직접적인 링크가 없음

 ex 2) searching online for "proprietary confidential" information

   - Google Hacking: 웹 사이트 구성 정보 및 컴퓨터 보안 취약점 분석을 위해 구글 검색 및 기타 응용 프로그램을 사용

   - Google Search Operators, hacking databaes  

 

Misleading Websites

 - Cybersquatters(도메인사냥)들이 유명한 도메인을 미리 등록해 사용자들에게 혼란을 줌

 - ex)www.google.com vs www.gogle.com

 

피싱

 - 위장된 홈페이지로 접속하도록 유도

 - 스팸메일, 스팸 문자 등 이용자들의 금융 정보 등 개인정보를 빼내는 기법 

 

파밍 (새로운 피싱 기법)

- 인터넷 주소창에 방문하고자 하는 URL을 입력할 때 가짜 사이트로 이동시키는 기법

- DNS Spoofing

- 공공기관 DNS를 탈취해 사용자가 기관에 접속한 것 같은 착각에 빠지게 만들어 개인정보 탈취

 

  -> 둘다 가짜 사이트를 개설하는 방식을 사용

 

Malicious Shellcode

 - Shellcode는 완전하지 않은 실행 가능한 이진 코드

 - 실행중인 프로세스의 가상 주소 공간으로 주입된 후에 실행 가능

- 대부분의 Shellcode는 Intel IA-assembly(x86)언어로 쓰여짐

- JS코드로 주입되었을 때 Shellcode는 다음을 실행할 수 있음

   - 브라우저 프로세스 Hijacks

   - 목표 프로세스나 시스템 제어

- Shellcode는 목표 시스템에서 악성 코드가 실행되는 공격 매개체가 될 수 있음

   - 보통 브라우저가 Shellcode를 포함한 JS코드를 다운로드

   - 외부에 있는 사이트에서 메인바디를 불러옴(짧기 때문에 자세한 내용을 넣긴 힘듬)

 => 쉘코드 대응 방법

 - Content Analysis [Static Analysis, Dynamic Analysis]

   - 사용하기 전 objects의 내용을 검사

   - 내용을 Instruction으로 디코딩 한 후 악성 루틴이 있는지 검사

 Static Analysis

   - 코드의 Siginatures 값을 사용

   - 이미 알고 있는 값을 사용하기 때문에 빠름 

   - 새로운 코드 패턴은 걸러지지 않음

 

Dynamic Analysis [*self-contained shellcodes를 가정]

  *self-contained: 쉘 코드 안에 악의적인 행동이나 필요한 모든게 담겨있는 코드 

   - 가상화를 통해 많이 사용 

   - 난독화가 소용이 없음(실행되면 똑같음, 다만 가상화라 안전), 새로운 형태도 검출이 가능해서 완전한 검출이 가능

   - 느림(강조) 

   - GetPC(Program Counter) code로 사용되어 지는지, 

 

 - Hijack Prevention  

   - Shellcode가 완전히 실행되는 것을 방지하는데 초점

   - Object의 내용 중간에 특수 바이트를 랜덤하게 삽입하여 실행되는 경우 예외를 발생

   - 여러 개의 짧게 연결된 shell code를 사용해서 회피 가능 

 

HTTP Authentication

  - 알 필요가 없는 사람들에게 Content 보호

  - 특정 URL에 접근하기 전 ID/PASSWD를 사용해서 인증하도록 함

  - HTTP/1.1은 사용자가 보호된 자원을 요청할 때 서버가 authentication request 헤더로 응답하도록 함

     - WWW-Authenticate 는 사용자와 서버 사이에 "challenge-response" 세션을 수행하기에 충분히 적절한 정보를 포함 한다. 

 

WWW-Authenticate

브라우저가 받게 되는 Authentication request는 다음과 같음

  - WWW-Authenticate=Basic realm="defaultRealm"

     - Basic = HTTP Basic authentication이 요청

     - realm = login 상황을 나타냄

        - realms에는 모든 종류의 security puzzle이 포함

          - User

          - Groups

          - ACLs (Access Control Lists)

- Basic Authentication 

  - Userid and password는 Base64 인코딩이 되어 전송(보통 평문)

  - Hacker는 디코딩할 필요도 없이 해당 정보를 가로채 저장한 뒤 계속해서 사용하는 Replay Attack 가능 

 

- Digest(해시 값) Authentication

 - Basic 문제를 극복하고자 함 

 - WWW-Authenticate = Digest realm = "defaultRealm" nonce="Server SpecificString"

   - Nonce는 일회용 랜덤 값으로 매번 달라짐

   - Nonce는 일방향 함수(MD5, SHA1)를 사용해서 사용자 ID와 패스워드를 인코딩해 서버로 보낼 때 사용

      - 이를 통해 패스워드를 일회용으로 만들 수 있음 

profile

아직은 잠이 안와

@Dirstibone

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!