보안되지 않은 웹 응용 프로그램을 해킹하는 방법

이 기사에서는 웹 응용 프로그램에서 기밀 정보를 얻는 것이 얼마나 쉬운 지 보여 드리고자합니다… 음,보안에 너무 많은 관심을 지불하지 않습니다. 내가 작업 할 것은 내가 데모 목적을 위해 봄 부팅에서 만든 샘플 자바 응용 프로그램입니다. 그러나 수행 된 공격은 다른 프로그래밍 언어 또는 프레임 워크에 유효합니다. 시연 될 일부 취약점 및 보안 문제는 다음과 같습니다:

  • 민감한 데이터 노출
  • 불충분 한 로깅
  • 깨진 인증

설정

일부 그룹의 일부인 사용자로 로그인 할 수있는 가상의 웹 응용 프로그램과 함께 작업 할 예정입니다. 사용자 역할에 따라 기본 또는 기밀 데이터를 볼 수 있습니다. 이 경우 회사의 직원 목록,상태 등이 표시됩니다.

페이지 개요

이 응용 프로그램에 대한 소스를 찾을 수 있습니다:https://github.com/rapasoft/hackme.

공격#1: 중간 공격에 남자

당신이 레스토랑에 앉아 위의 응용 프로그램에서 뭔가를 확인하고 싶습니다 상상해보십시오. 당신은 레스토랑의 무선 인터넷에 연결 로그인 페이지를 열고 자격 증명을 입력하고 원하는 정보(특정 직원의 예를 들어,목록)를 얻을 수 있습니다. 당신이 지금하지 않을 수 있습니다 무엇,자격 증명이 손상되었다는 것입니다. 로그인 페이지를 자세히 살펴 보겠습니다:

로그인 페이지

이 응용 프로그램은 사용하지 않습니다(예:https://연결 없음). 즉,전송 된 모든 정보는 클라이언트와 서버 간의 통신에 액세스 할 수있는 모든 사람이 일반 텍스트로 볼 수 있습니다.

이 중간 공격에 소위 사람에서 무슨 일이 일어나고 정확히. 더 구체적으로,이 경우 아프 스푸핑은 공격자가 계속되고 모든 패킷에서 냄새를 맡을 수있는 모든 것을 인식하도록 전체 네트워크를 독살하는 방법으로 사용되었습니다. 나는 아르프 스푸핑이 작동하는 방법에 대한 세부 사항에 가지 않을거야,하지만이 비디오에 그것을 시연 할 예정이다:

유튜브 영상

이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다.이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다.또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다.이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다.이러한 쿠키를 거부 할 수도 있습니다.그러나 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다. 사용자(나 아이 패드를 통해)자격 증명을 입력 할 때 한편,그들은 에터 캡과 와이어 샤크(네트워크 트래픽 분석을위한 도구)에서 모두 볼 수 있습니다.

공격#2: 이 응용 프로그램의 공격자 역할을 계속하면서 암호P4SSW0RD가 있는 사용자hgraves에 대한 자격 증명을 갖게 되었습니다. 이 응용 프로그램은 사용자가 정말 끔찍한 암호를 선택할 수 있도록 매우 약한 암호 정책을 가지고뿐만 아니라,이 응용 프로그램을 사용하지 않는 것을 볼 수 있습니다.

우리는 위의 자격 증명을 사용하여 로그인하고 사람들의 목록을 검색 할 수있는 옵션을 하나의 입력 필드를 볼 수 있습니다. 누르면Search우리는 사람들의 전체 목록을 얻을 것이다. 예를 들어”훌라”를 넣으면 검색을 기반으로 필터링 된 결과를 얻을 수 있습니다. 만약 우리가 거기에 어떤 불법 문자를 넣어? 이 응용 프로그램 뒤에 일부 데이터베이스가 있으므로'문자를 사용해 보겠습니다.:

그러나POST요청이 실패했음을 확인할 수 있습니다. 우리는WHERE P.NAME LIKE '%'%'이 마지막에 사용된다는 것을 알 수 있습니다.

숙련 된 해커는 더 필요하지 않습니다. 검색 문자열을 조정하면 몇 번의 시도 후에 이러한 결과를 얻을 수 있습니다:이 문제를 해결하려면 다음을 수행하십시오.

이 경우 삽입은 자신의 역할과 함께 사용자 이름과 암호를 가져 문을 선택하는 조합을 만들었습니다. 이 작업은 성공적 일뿐만 아니라 원래 클라이언트 응용 프로그램에 표시 할 수있었습니다.

이제 모든 사용자의 자격 증명과 역할(“연령”열의 정수로 표시)이 있습니다. 따라서hframe에 역할 1 이 있는 경우rgraves는 역할 3 을 가진 더 중요한 사용자여야 합니다.

공격#3: 약하게 해시 된 암호를 공격

우리는 아마이 응용 프로그램에 대한 설정 암호 정책이 없다는 것을,첫 번째 공격에서 배웠습니다. 이것은rgraves가 보안에 너무 많은 관심을 기울이지 않는다는 희망을 줄 것입니다.

불충분 한 해싱 알고리즘을 사용하는 암호의 해시를 해독하는 가장 쉬운 방법은 사전 또는 무지개 테이블 공격을 수행하는 것입니다. 이 많은 가능성이 있지만,가장 쉬운 하나는 이미 암호-해시 조합의 큰 데이터베이스가있는 인터넷 서비스를 사용하는 것입니다:

금이 간 해시

첫 번째는hframe,두 번째는rgraves입니다. smorgan이 사전에 없기 때문에,다른 사람보다 더 강력한 암호를 사용하는 것 같다.

rgraves에 대한 암호가 황새치라는 것을 알 수 있습니다.이 암호는 사전이 아닌 암호를 선택하는 것이 얼마나 중요한지 알 수 없습니다.). 이제이 사용자로 로그인하고”관리자”섹션 및 기밀 정보를 발견하는 것을 막을 수있는 것은 없습니다:

관리자 섹션

당신이 독일인이라면 이것을 읽지 마십시오.:)

이 문제를 해결하는 방법?

이 모든 것이 쉽게 방지 될 수 있다고 말할 수 있습니다. 당신은 이러한 신인 실수라고 말할 수 있습니다. 음,이 사실 일 수도 있지만,또한 사실은 오픈 웹 응용 프로그램 보안 프로젝트는 웹 응용 프로그램에서#1 취약점으로 주입을 나열한다는 것입니다(그리고 몇 년 동안이 같은되었습니다).

그래서,당신은 자신이 모든 것을 방지하는 방법을 궁금해 발견 한 경우,의 요점을 되풀이하자:

  • 서버에 무언가를 보낼 때 항상 사용하십시오. 자격 증명 일 필요는 없으며 현재 일반적으로 좋은 관행으로 간주됩니다. 너는 모두에 너의 페이지에 어떤 입력이 있지 않으면 비록! 가장 쉬운 방법은 암호화하자 같은 서비스를 통해 인증서를 제공하는 것입니다.
  • 자체 서명 된 인증서는 데이터 노출 문제를 완화 할 수 있지만 공격자가 자체 서명 된 인증서로 전체 사이트를 가짜로 만드는 것을 방지하지는 않습니다.
  • 항상 클라이언트에서 가져온 매개 변수를 이스케이프합니다. 가장 쉬운 방법은 프레임워크의 기능을 사용하는 것입니다.
  • 편집증. 사용자 입력의 유효성을 검사합니다. 자바/스프링 월드에서는 최대 절전 모드 유효성 검사기와 같은JSR-380빈 유효성 검사 구현을 사용하여 유효성 검사 규칙을 추가하고 매개 변수에 주석을 달 수 있습니다(예:@Pattern(regexp = "*") String name'을 입력하지 못하게합니다.
  • 응용 프로그램에서 잘못된 입력을 전달하려는 시도를 기록합니다. 또한 오류가 발생한 경우 구현 관련 정보를 클라이언트에 노출시키지 마십시오.
  • 인증을 향상시킵니다.
    • 가능한 경우 최소 2 단계 인증을 사용하십시오.
    • 사용자 지정 암호 저장 또는 암호화 알고리즘을 구현하지 마십시오. 혼자서 하는 것은 극단적으로 곤란하 너는 명확하게 실패할 것이다. 다음과 같은 입증 된 솔루션이 있습니다.
  • 읽기 및 책갈피 10. 거기에서 시작 하 고 모범 사례의 그들의 목록을 통해 이동 합니다.

Write a Comment

이메일 주소는 공개되지 않습니다.