보안
-
printf, scanf등의 호출은 포함하는 함수에서의 push ebx(레지스터)보안/포너블(Pwn) 2021. 7. 2. 15:53
간혹 컴파일된 어셈블리어를 보고 분석하다보면 다음과 같은 상황을 마주하게된다. 어떤 함수(func1)에서 분명히 선언한 지역변수는 4바이트 짜리 한개 밖에 없는데, 어셈으로 보면 해당 지역변수의 주소가 ebp-0x04가 아닌, ebp-0x08인 경우. 알고보니, 함수 초반에 ebp, esi, edi등이 push된 경우. 참으로 난감한 순간이다. 사실 이는 함수(func1) 호출 전과 후의 레지스터 값을 동일하게 해주려는 백업, 복원잡업이다. 이 작업이 필요한 이유에 대해서는 확언할 수 없다. 추후에 알게된다면 내용을 추가하도록 하겠다. 간단한 예시를 통해 이를 살펴보도록하겠다. 필자는 대표적으로 이 당황스러운 push가 scanf, printf의 호출을 포함하는 경우 발생한다는 것을 발견하였다. 위 함수..
-
메모리 보호기법 - SSP(Stack Smashing Protector)보안/포너블(Pwn) 2021. 7. 2. 03:22
gcc 4.1부터 stack overflow를 방지하기 위해 생겨난 메모리 보호기법이다. stack overflow가 발생하면 stack smashing detected가 뜨면서 프로그램이 종료된다. SSP관련 gcc 옵션은 다음과 같다. -fno-stack-protector : SSP미적용. -fstack-protector-all : 지역변수로 char배열이 있는 함수 뿐만이 아니라, 모든 함수에 SSP를 적용. SSP의 기능으로는 3가지가 있다. 예제와 같이 알아보자. #include int func(char *a){ int tmep=65; char buf[10]; scanf("%s", buf); } void main(){ int a=2; func("12345"); } 아래 소스코드는 다음 옵션을 주..
-
Apache설정 중 발생할 수 있는 보안 오류와 Path Traversa취약점보안/WEB 2021. 6. 22. 17:14
보안 오류 시나리오. VirtualHost, MainHost의 여부와 상관없이, DocumentRoot를 최상위(/)로 설정하는 것. Host에 대한 설명은 다음 링크 참고*(link) 에 대한 Require을 all grated로 주는 것(+Indexes FollowSymLinks까지 주면 환상..) 즉 사용자가 서버의 최상위Dir에 접속할 수 있는 경우이다. 이는 서버 작업 중 편의를 위해 설정할 수 있으나, 반드시 실제 배포시에 수정되어야할 설정이다. DocumentRoot만 잘 설정해주어도 발생할 염려가 적다. 이 Directory관련한 일반적인 보안 이슈는 Path Traversa이다. 이는 사용자가 파일을 요청할 때 상대경로를 이용하여 파일을 요청하는 것으로, DocumentRoot를 잘 설정..