본문 바로가기

보안

(78)
220721 수업 firee1]ye.kr 에 중요한, 최신 문서들 제공 apt 공격 분1업화,지능화 팀의 조직적,장기적 공격 백신 우회 공격 .exe .dll .sys .scr -> PE 포멧(이식성(어디서든 호환가능)이 있는 실행가능) .EXE 파일을 압축 -> 해당 파일을 실행 압축형으로 만듬 실행압축 프로그램은 최소 50가지인데 이런 프로그램보다는 해커라면 직접 실행압축을 할 줄 알아야 한다 다중 실행 압축을 하면서 백신을 우회한다. 악성코드의 90%가 실행압축형 [PACKER] compresser protector(난독화) [관련 키워드] themida 백신 서버 *------------------------------------------------ 인텔 cpu는 기계어를 인식하는데 커널모드와 사용자 모드들이 있..
웹 쉘 파일업로드 취약점 파일 업로드 취약점 주로 게시판에서 파일 업로드 하는 기능을 악용해서 시스템에 침투를 하는 취약점을 의미한다. 그리스 로마신화에서 트로이 목마처럼 몰래 악의가 없는거처럼 내부에 들어갔다가 통수를 치는 취약점이다. 즉 악성스크립트를 업로드를 시키고 서버상에서 그 스크립트를 실행을 시켜서 쉘을 획득하여 서버를 장악을 하는것을 뜻한다. 악성스크립트는 보통 웹셀의 업로드를 통해 서버를 장악을 할 것이다. 그러면 어떤 파일들이 웹에서 구동 되는지 알아보자. 언어 확장자 asp,aspx asp, aspx, html, htm, asa php phtml, php, php3, php4, php5, inc, htm, html jsp,java jsp, jspx, jsw, jsv, jspf, htm, html perl pl,..
버퍼 오버플로우 6 실습 이전 버퍼 오버플로우 5에서 return 주소를 변경을 통해 프로그램 로직을 변경 할 수 있다는 것을 알아보았다 그렇다면 어떤 주소로 점프를 해야지 관리자 권한을 획득할수 있을까? 관리자 권한을 바꿔주는 함수가 프로그램안에 있다면 가장 베스트 플랜이겠지만 그렇지 않는 경우가 대부분이기에 스택안에다가 shell code를 강제로 삽입을 한다. shell code 란? 윈도우에서는 프롬프트 환경에서 > 이고 리눅스에서는 $ 혹은 # 으로 명령을 받는데 이를 shell 이라고 한다 이 shell을 통해 특정 명령을 실행을 하는데 쉘 코드는 시스템의 특정 명령을 실행하는 프로그램을 뜻 한다 . 실습 시나리오 원리 1. 32byte 길이의 shellcode를 사용 2. shell code 작성을 할때 NOP (아..
버퍼 오버 플로우 실습 5 이전에 실습한 내용을 복사한 후 nobody_call_me 라는 함수를 만든다. 소스를 보다 싶히 nobody_call_me()를 main에서도 copier 에서도 호출하지 않는다 하지만 버퍼오버플로우를 이용해 실행을 시키려고 한다 실행이 잘 되는것을 확인해보자 gdb로 nobody를 실행을 시켜 보고 list를 통해 소스들도 확인해보자 이제 nobody_call_me()를 함수 시키기 위해서는 해당 함수의 주소를 알아야 해당 주소로 점프를 할수 있다 print (함수이름) 으로 실행을 시키면 해당 주소를 확인할수 있다 0804920a 의 주소로 알수 있다 소스에 string copy 하는 부분을 break을 걸어주고 실행을 시킬때 마지막에 nobody_call_me 함수이름을 써서 실행 (4 x 5=2..
버퍼 오버플로우 실습 4 위 내용은 버퍼오버플로우 실습 3이랑 이어집니다 실습4에서는 실습 3이랑 거의 똑같은 것을 할것인데 실습 3에서는 gdb에서 run 을 할때 A로 도배를 해서 ebp와 return address가 어떻게 변했는지 확인을 하는 실습을 했는데 너무 A로만 도배를 해서 값이 어떻게 변했는지 알수가 없는데 문자를 중간에 다르게 해서 실습을 해보자 break 11 걸어주고 실행을 시킬때 마지막쯤에 다른 문자들을 넣어 준다 실습 3에서도 말했듯이 스택에 08로 시작하는 것은 명령어 쪽에 대한 리턴 주소들이고 bf로 시작하는 것은 스택에 관한 주소들인것을 알수 있다. 즉 저 08(노란색 하이라이트)가 리턴 주소이고 그 바로 옆이 스택 데이터 이다 저 위치를 잘 기억해놓고 있다가 break 된 부분을 next로 풀고 ..
버퍼오버플로우 실습 3 버퍼오버플로우 실습 1 과 비슷한 소스 내용이나 차이점은 서버함수가 추가가 된다 이전에 버퍼오버플로우 실습1 에서 못봤던 스택 같은 상태 정보 등을 볼수 있을것이다. 버퍼 오버 플로우 2 보안 환경 설정에서 했던 것처럼 컴파일을 한다. 예상했던것 처럼 버퍼 오버플로우가 가능하다 이제 디버깅을 통해 상세히 알아보자 gdb로 해당 프로그램을 실행시키고 list 명령어로 내가 원하는 프로그램으로 됬는지 확인해보자 copier() 부분인 11번째 줄 break 와 strcpy() 부분인 6번쨰에도 break를 시키고 실행을 해보자 break 가 잘 걸린걸 확인했고 레지스터를 한번 봐보자 esp:bffff6e0 ebp:bffff6e8 을 확인한다 왜냐면 함수(copier)를 call를 하면 ebp에 정보를 sta..
버퍼 오버 플로우 2 보안 환경 설정 이제 앞으로 버퍼 오버플로우 실습을 최대한 문제없이 실습하기 위해 실습 환경 또한 2018.04 버전의 칼리 리눅스를 선택하였지만 여기서 추가적으로 보안 설정을 해제를 해줘야 실습을 원할하게 할수 있다. 1.가상주소 공간 randomlization 기능 프로그램이 실행 될때 0번째 부터 2^32 번째 까지 전체 메모리 공간을 나 혼자서 쓸수 있을것 처럼 구현이 되어있다. 과거에는 가상주소 공간에 프로그램이 매번 실행될때마다 사실 동일한 공간에 메모리가 올라가게 되고 스택의 주소 같은것들 또한 프로그램을 언제 실행되든 변경이 되지 않는다. 이떄 문제는 버퍼오버플로우 악성프로그램이 잘만 만드면 누구든 권한 상승이 가능한 문제가 발생하게 되어서 메모리 공간에 프로그램이 올라갔을때 조금의 랜덤성을 부여하여 동일..
버퍼 오버 플로우 실습 1 // gdb 오버플로우, 디버깅 실습 환경 : 칼리 리눅스 2018.04 보통 root로 칼리 리눅스를 로그인을 하는데 버퍼 오버플로우로 인해 사용자 권한에서 관리자 권한으로 상승을 실습을 할것이기 때문에 사용자 계정을 생성한다. adduser를 통해 사용자 계정 생성 su 를 통해 생성한 사용자로 로그인을 한다. GDB 실습 (디버거 실습) 먼저 vi test1.c 라는 파일을 생성하여 아래 그림과 같은 소스를 작성한다 . gcc로 컴파일을 한다 이때 -g 옵션을 넣어서 디버깅 옵션을 추가한다. 이제 준비는 맞췄다. gdb 라는 프로그램으로 해당 프로그램을 디버깅을 할것이다. list 를 써서 test1으로 잘 했는지 확인 한번 쏵 해주자 컴파일을 할때 -g 옵션을 하였기 때문에 소스코드 또한 바이너리 안에 포함되서 보이는것이다 . ..