550 likes | 1.08k Views
[Hacking Exposed] 웹 기획 . 운영자를 위한 해킹과 보안중에서. 인증 (Authentication) & 인가 (Authorization). 이성현 한남대학교 컴퓨터공학과 네트워크 실험실. 목차. Part I : 인증절차. Part II : 웹 인증 공격. Part III : 인증회피하기 & 요약. Part IV : 웹 인가 공격. Part V : 인가공격 방법론. 목차. 인증 절차 웹 인증 공격 인증 회피하기 & 요약 웹 인가 공격 인가 공격 방법론
E N D
[Hacking Exposed] 웹 기획. 운영자를 위한 해킹과 보안중에서 인증(Authentication) &인가(Authorization) 이성현 한남대학교 컴퓨터공학과 네트워크 실험실
목차 Part I : 인증절차 Part II : 웹 인증 공격 Part III : 인증회피하기 & 요약 Part IV : 웹 인가 공격 Part V : 인가공격 방법론
목차 • 인증 절차 • 웹 인증 공격 • 인증 회피하기 & 요약 • 웹 인가 공격 • 인가 공격 방법론 • 사례 연구 및 맺음말
Part I : 인증 절차 (Authentication Mechanisms)
HTTP 인증 : Basic & MD • 기본 인증(Basic Authentication) • 웹 어플리케이션에서 이용할 수 있는 가장 기본적인 형태의 인증 • 사용자 이름과 패스워드를 요구하여 이를 처리 • 입력된 사용자 이름과 패스워드를 Base 64 알고리즘을 사용하여 부호화하여 전송 • 해커들에 의해 쉽게 해독할 수 있음 • 기본 인증 프로토콜의 취약성을 내재 • 기본 인증에 128 bit SSL 암호화 프로토콜의 적용을 강력히 권장
HTTP 인증 : Basic & MD • 기본 인증(Basic Authentication)
HTTP 인증 : Basic & MD • 기본 인증(Basic Authentication) [root@gridsecurity root]# perl bd64.pl dGVzdDp0ZXN0 test:test
HTTP 인증 : Basic & MD • 다이제스트(Digest) • 기본 인증보다 높은 보안 수준을 제공하기 위해 설계 • RFC 2617(HTTP Authentication: Basic and Digest Access Authentication ) • Challenge-response 인증 모델을 기본으로 함 • 기본 인증과 유사한 절차로 동작 • 인증 요청에 대한 응답 • Nonce(랜덤 값) 전송 후 메시지 다이제스트 암호 함수 사용 • 메시지 다이제스트 암호 함수 • 사용자 이름, 패스워드, 랜덤 값, HTTP 방법, 요구된 url 값을 다이제스트
HTTP 인증 : Basic & MD • 다이제스트(Digest) • Nonce & 메시지 길이 확장 User ID + P/W User ID + P/W + Nonce + HTTP + URL ? 전사 공격 사전 전사 공격 사전 ? MD5 Message Digest MD5 Message Digest 동일 길이의 다이제스 값 동일 길이의 다이제스트 값
HTTP 인증 : Basic & MD • 다이제스트(Digest) 출력되는 메시지의 길이 변경 가능 [root@gridsecurity root]# perl md5-encode.pl shlee 48e3dd6dd52183781484827d4c470b7c
HTTP 인증 : Basic & MD • 통합 윈도우(NTML) • HTTP에 대한 마이크로소프트사의 독점 NT LAN 관리자 • NTLM 인증 또는 윈도우 NT challenge/response로 알려짐 • 마이크로소프트사의 인터넷 익스플로러와 IIS 웹 서버 사이에서만 동작 • Challenge-response 메커니즘을 사용하여 다이제스트 인증과 동일한 방식으로 작동 • NTML 증명서와 NTLM 인증 프록시 서버를 통하여 강력한 보안 기능 제공 • 대부분의 인터넷 사이트에서 다양한 브라우저를 지원하기 때문에 일반적으로 수행하지 않음
HTTP 인증 : Basic & MD • 협의(Negotiate) • NTML의 확장으로 윈도우 2000에서 소개 • HTTP에 대해 Kerberos 기본 인증을 제공 • 사용되고 있는 보안 수준을 결정하기 위해 협의 과정을 사용 • 통용 호스트가 윈도우 2000일 경우 매우 강력한 보안 제공 • 인트라넷을 제외한 경우 제한적이며 일반적이지 않음 • 외부적인 보안 공격에 강함 • Kerberos 인증 메커니즘의 사용
HTTP 인증 : Basic & MD • 증명서(Certificate) –기본(Basic) • 강력한 사용자 인증 방법 • 공개키 암호와 증명서를 사용 • 증명서 이용 • 물리적 토큰 • 사용자 인증서를 하드웨어(스마트 카드)에 저장 • 스마트 카드 판독기를 통해 사이트에 접근 • 클라이언트 증명서 • 접근할 수 있는 클라이언트에 증명서를 배부 • 엄청난 비용 부담으로 작용 • 제한된 사용자를 가진 사이트에 유용 • 현재까지 알려진 공격 방법이 없음
HTTP 인증 : Basic & MD • 복합적인 인증 방법 • 다양한 방법을 복합적으로 적용하여 안전한 인증을 제공 웹 인증 메커니즘에 대한 요약
폼-기반 인증(Forms-Based) • 폼-기반 인증(Forms-Based Authentication) • HTTP와 SSL과 같은 기본 웹 프로토콜 특징에 의존하지 않음 • HTML 태그들로 구성된 사용자 이름/패스워드 정보 입력 필드를 포함 • <FORM>, <INPUT> • 표준 웹 프로토콜에 의존하지 않기 때문에 폼-기반 인증을 수행하기 위한 표준화된 방법이 존재하지 않음 • ASP.NET의 경우 • 사용자 아이디와 패스워드를 입력하는 두 개의 필드를 포함 • 로그인 버튼을 사용하여 입력된 데이터를 서버로 전송
폼-기반 인증(Forms-Based) • 폼-기반 인증(Forms-Based Authentication) 사용자 아이디 입력 필드 사용자 패스워드 입력 필드 입력된 폼 데이터를 서버로 전송
폼-기반 인증(Forms-Based) • 잠재적인 약점 • 쿠키들이 일시적으로 인증 토큰(token)을 저장하기 위해 사용 • 사용자가 웹 사이트에 대한 정보를 반복하여 입력할 필요가 없음 • 저장된 쿠키들에 대한 비 암호화 • 쿠키에 대한 조정에 무방비 • 유출된 경우 사용자 정보를 보호할 수 없다.(7장, 12장) • 사용자 눈에 보이지 않는 태그 • 서버에 보내기 전에 공격자들에 의해 수정될 우려가 있음
패스포트(Passport) • 마이크로소프트 패스포트 • 마이크로소프트사의 범용 SSI(Single Sign-in) 플랫폼 • Ex) MSN, Hotmail, 메신저와 같은 동일 아이디 접근 가능 사이트 • 패스포트 인증 하부 구조 • 패스포트 SDK, API 제공 • 폼-기반 인증과 비슷하지만 사용자 인증시 패스포트 로그인 서버에서 제공하는 인증 쿠키를 받음 • 인증 쿠키(암호화된 키를 보유)를 통해 관련 서버에서 인증 받을 수 있음
패스포트(Passport) • 마이크로소프트 패스포트 login.passport.com (3) (4) (5) (2) (1) Client Partnet
패스포트(Passport) • 패스포트 공격(Attacks Against Passport) • 패스포트 인증의 중요한 문제점 • 의심스러운 사용자의 컴퓨터로부터 훔쳐진 패스포트 인증 쿠키를 사용하는 공격을 재현할 수 있음 • 제약 사항의 부족으로 패스워드 추측 공격을 받기 쉬움 • 최소 6문자 이상의 길이 외에는 제약사항이 없음 • 계정 락아웃(lockout)에 의한 시간동안 온라인 패스워드 추측 공격이 가능하도록 설계 • 계정 락아웃 동안에 패스워드의 초기화 가능
Part II : 웹 인증 공격 (Attacking Web Authentication)
패스워드 추측 • 패스워드 추측 • 웹 인증을 파괴하는 가장 효과적인 기술 • 프로토콜의 취약성을 제외한 인증의 가장 큰 취약요소는 사용자 패스워드의 선택 문제 • Ex) 사전에 사용된 단어, 신상 정보의 조합, 전화번호 등. • 패스워드 추측은 자동화된 방법 또는 수동으로 수행될 수 있음 • 다양한 형태의 패스워드 추측 자동화 도구가 활용 • 웹 크래커(WebCracker) • 브루투스(Brutus)
패스워드 추측 • 패스워드 추측
패스워드 추측 • 웹 크래커(WebCracker)
패스워드 추측 • 브루투스(Brutus)
패스워드 추측 • 패스워드 추측 대응 방법 • 강력한 패스워드 정책과 계정 로그아웃 정책 • 제한된 인증 실패시 계정을 블록 시킴 • 계정 블록에 대한 공격을 방어해야 함 • 일정 기간동안 블록 • 충분히 긴 패스워드 사용 • Brute forcing 공격을 완화 시킴 • 폼-기반 인증에서 응답 페이지를 사용하지 못하도록 함 • 공격에 필요한 도구들을 무력화 시킴
세션 ID 예측과 Brute Forcing • 세션 ID • 웹 인증과 결합한 세션 지시자(세션 ID)를 사용 • 세션 ID의 저장으로 증명서를 통한 재 타이핑이 필요 없음 • 해커의 목표가 될 확률이 높음 • 세션 ID 유추 기법 • ID 예측(ID Prediction) • 전사 공격(Brute Forcing) • 세션 ID 공격에 대한 대응 방법 • 예측하기 어려운 세션 ID를 설계 • Ex) 난수 발생기를 통한 세션 ID 생성 • Brute Force 공격을 방어하기 위한 충분히 큰 세션 ID 공간 확보 • Ex) 128 비트
쿠키 파괴 • 쿠키(Cookie) • 일반적으로 인증과 관계된 민감한 데이터 포함 • 쿠키가 패스워드 혹은 세션 ID를 포함할 경우, 해당 웹 사이트에 대한 성공적인 공격을 지원 • 쿠키의 획득을 위한 공통적인 방법 • 클라이언트측 스크립트 삽입을 통한 쿠키 획득 • 네트워크 트래픽 탐지기를 통한 쿠키 획득 • Reverse-Engineering을 통한 쿠키 획득 • 쿠키들의 샘플을 통한 변화 추측 • Bit-Flipping 공격 • 쿠키의 유효성 여부 판정후 비트 수정
쿠키 파괴 • 쿠키 파괴에 대한 대응 방법 • 스크립트의 삽입을 막음 • 쿠키에 인증과 관련한 민간함 데이터의 포함 금지 • 쿠키의 암호화 • 쿠키의 인증을 위한 MAC(Message Authenticity Code) 포함
SQL-백 로그인 폼들을 피하기 • SQL 백-엔드 • 대부분의 사이트에서 사용자 인증을 위한 아이디와 패스워드를 데이터베이스에 저장 • 폼-기반 인증을 수행하는 웹 사이트에서의 SQL 삽입은 인증을 피하기 위해 사용 가능 SELECT * from AUTHENTICATIONTABLE WHERE Username = ‘username input’ AND Password = ‘password input’ SELECT * from AUTHENTICATIONTABLE WHERE Username = ‘Username’ -- AND Password = ‘password input’ -- 이후는 주석으로 처리, 사용자에 대한 암호 확인을 제거하여 불법적인 접근 허용 SELECT * from AUTHENTICATIONTABLE WHERE Username = ‘Username’ AND Password = ‘DUMMYPASSWORD’ OR 1 = 1— OR 1=1의 첨부에 의하여 SQL 질의가 항상 참으로 해석, DUMMYPASSWORD에 의해 불법적인 접근 허용
SQL-백 로그인 폼들을 피하기 • SQL 백-엔드 대응 방법 • 사용자 아이디/패스워드 입력에 대한 유효성 확인 • 사용자 아이디 • 대부분의 사용자 아이디가 잘 정의 • 숫자와 알파벳의 조합으로 일반적으로 6-10 문자의 길이를 가짐 • 패스워드 • 특수 문자를 포함하는 충분히 긴 패스워드 사용 • 입력 유효성을 판별하기 어려움 • 잠재적인 위험과 특수 문자들로 구성된 타협안 필요 • 인증과 관련된 소프트웨어 패키지의 최신성 유지
Part III : 인증 회피하기 & 요약 (Bypassing Authentication & Summary)
인증 회피하기 & 요약 • 인증 회피하기 • 인증은 많은 애플리케이션 프로그램 보안에서 중요한 역활을 차지 • 다양한 방법을 통하여 인증을 회피할 수 있음 • 적절한 방법을 통하여 적합한 인증 증명서를 제시하는 것이 필요 • 요약 • 인증은 민감하거나 기밀을 요하는 정보를 가진 웹 사이트의 보안에서 절대적인 역활을 차지 • 입력의 유효성은 웹 사이트의 해킹을 막을수 있는 좋은 방법 • 세션 ID를 허용할 경우 다음과 같은 속성을 확인 • 예측되지 않아야 함 • 추측할 수 없는 충분히 큰 키 공간을 확보
Part IV : 웹 인가 공격 (Attacking Web Authorization)
인가(Authorization) • 인가 • 사용자가 애플리케이션에 로그인될 수 있는지를 결정 • 사용자가 접근할 수 있는 애플리케이션 프로그램을 결정 • 인가를 통한 공격 루트 • 잘못된 웹 서버 설정 • 동적으로 생성된 출력과 대립되는 형태 • 소스 코드 접근 • 디렉토리간 이동 • 제한된 정보에 접근하는 것이 목표
공격(The Attacks) • 애플리케이션의 접근 통제 테스트 • 수평적 권한 확대 • 대등한 사용자 정보 • 주민등록번호 • 제한된 데이터가 아닌 사용자 수준에서의 이용 가능한 기능을 목표 • 수직적 권한 확대 • 높은 사용자 정보 • 관리자 아이디/패스워드 등의 정보 • 사용자 수준에서 제한된 기능과 데이터를 목표 • 임의의 파일 접근 • 데이터 증명서 또는 웹 문서 루트밖의 파일 정보 • 웹 서버를 목표
공격(The Attack) • 역할 행렬(Role Matrix) • 인가 감시 과정을 돕는 유용한 도구 • 애플리케이션 프로그램과 그것과 관계된 모든 사용자들의 목록을 포함 • 애플리케이션 프로그램이 사용자 형태의 결합을 포함할 때 유용 • 행렬 • 상태 정보의 확인을 도움으로써 인가 방법을 다룸 • 애플리케이션이 올바른 변수 이름을 상요하지 않을 경우 도움이 됨 • 각 파라미터에 한 문자를 할당할 경우 인가를 피하기 위한 파라미터 값 수정을 막지 못함 • 다양한 공격 시나리오를 유추할 수 있음
공격(The Attack) • 역할 행렬(Role Matrix) 다른 사람의 UID를 결합하여 해당 정보를 볼 수 있음
Part V : 방법론 (The Methodology)
방법론(The Methodology) • 웹 인가 공격을 위한 시나리오 • 프로파일(Profile) • 사용자 프로파일 정보의 열람 영역은? • 프로파일 페이지는 어떤 파라미터 혹은 쿠키에 의존 하는가? • 파라미터가 사용자 정보 또는 무작위 수를 나타내는가? • 누군가 프로파일을 보기 위해 값들을 변화시킬 수 있는가? • 장바구니(Shopping Carts) • 장바구니 내용을 볼 수 있는 영역이 있는가? • 장바구니 보기 페이지는 어떤 값에 의존하느가? • 다른 사람이 장바구니를 보기 위해 값을 변화시킬 수 있는가?
방법론(The Methodology) • 웹 인가 공격을 위한 시나리오 • 쇼핑 계산(Shopping Checkout) • ‘구입하기’ 페이지는 어떤 값에 의존하는가? • 다른 사람이 계산 페이지를 보기 위한 값을 변경시킬 수 있는가? • 사용자의 정보를 담고 있는가? • 공격자가 물건을 구입후 배송할 수 있는가? • 패스워드 변경(Change Password) • 애플리케이션이 패스워드 변경을 어떻게 다루는가? • 이전의 패스워드를 아는것이 필요한가? • 패스워드는 이메일 주소로 보내지는가? • 패스워드가 보내지기 전에 목적지 이멩리 주소를 바꿀수 있는가?
질의 스트링 • 질의 스트링 • 변수를 통과하기 위해 사용되는 물음표(?) 부호 다음의 URI 데이터 여분의 비트 • 클라이언트와 서버 사이에서 데이터를 전송하는데 사용 • 다양한 값을 포함할 수 있음 http://www.mail.com/mail.aspx?mailbox=joe&company=acme%20com http://www.mail.com/mail.aspx?mailbox=jane&company=acme%20com 질의 스트링을 jane로 바꿈으로써 joe가 인가되는 동안 jane의 메일 계정으로의 접근 시도 * 국내 대부분의 포털 메일서비스에서는 적용되지 않음(daum, hanmir, korea.com, yahoo 등
데이터 POST(Post Data) • 데이터 포스트 • 질의 스트링의 수정 용이로 인하여 대부분의 웹 어플리케이션에서 GET 보다 POST 방법을 사용 • POST에서는 데이터를 보여주지 않음 수정이 어렵다(?) • HTML 페이지 저장 • HTML 소스 수정 • 올바르지 못한 POST 요구 POST 되는 값들을 쉽게 바꿀수 있음
데이터 Post(Post Data) • 데이터 포스트
숨김 태그들(Hidden Tags) • 숨김 태그 • 데이터를 서버에 보내기 위해 폼에서 사용되는 감춰진 값들 • 세션, 필요한 데이터를 추적하는데 사용 • 숨겨진 태그들이 HTML 코드내에 포함 • HTTP 폼의 일부 • GET 또는 POST 요구에서 값을 전달 • 실제 숨겨진 태그들을 찾아야 인가 공격이 가능 • 필드 이름 또는 HTML 구성 요소들이 태그의 함수에 부가적인 정보 또는 단서를 제공
숨김 태그들(Hidden Tags) • 숨김 태그 * 우체국의 인터넷 뱅킹 페이지(http://www.epostbank.go.kr)
HTTP 헤더(HTTP Headers) • HTTP 헤더 • 웹 어플리케이션 프로그램에 의해서 공식적으로 사용되지 않음 • HTTP 프로토콜으 사용하는 클라이언트들을 가지고 있는 애플리케이션 프로그램과 함께 사용 • 가장 널리 알려진 헤더는 쿠키임 • Curl을 포함한 도구에서 사용자 에이전트 헤더를 명시
HTTP 헤더(HTTP Headers) • HTTP 헤더
쿠키(Cookies) • 쿠키 • 세션 운영의 대중화된 형태 • 사용자 정보등의 중요한 필드를 저장하는데 사용 • 데이터를 쿠키에 저장할 수 있음 • 쿠키에 저장된 데이터를 쉽게 수정할 수 있음 • 쿠키스파이의 사용 • 인터넷 익스플로러에 플러그인 된 형태로 쿠키의 내용을 표시 • 쿠키스파이를 통해 쿠키를 수정할 수 있음
쿠키(Cookies) • 쿠키 현재 CNN 웹 사이트의 쿠키를 표시(사용자 이름, 값)