삽입공격
프로그램의 입력 데이터가 우연히 또는 의도적으로 프로그램의 실행의 흐름에 영향을 줄 때 발생
*이 문제를 발생시키는 흔한 경우 중 하나는 입력 데이터가 시스템의 다른프로그램의 인자로 전달되고, 그 출력이 원래 프로그램에서 사용되는 경우
(대부분 스크립트 언어에서 발생)
→코딩 노력을 줄이기 위해 기존 프로그램과 시스템 유틸리티의 재사용을 권장
대부분 html 형태로 제공되는 데이터를 처리하는 web CGI 스크립트로 사용됨
SQL삽입공격?
사용자가 제공한 입력에 데이터베이스로부터 정보를 조회하는 sql requset를 구성하기 위해 사용
코드 삽입공격?
입력 데이터에 공격 대상 시스템이 실행할 코드를 삽입
버퍼오버플로우 공격 예: 기계어 코드인 쉘코드를 삽입
스크립트 언어 코드 삽입
- PHP 원격 코드 삽입 취약점, 혹은 php 파일 포함 취약점이라 부름
- php CGI 스크립트가 취약점을 가지고 있어 활발히 악용되고 있음
*방어
- form field의 값을 전역 변수에 할당하는 것을 차단
- include/require 명령어에 상수 값만을 사용
교차 사이트 스크립팅(xss)공격?
한 사용자가 제공한 입력을 다른 사용자에게 출력하는 공격을 말함.
보통 스크립트로 작성된 웹 응용에서 발견됨
- 취약점은 html 문서에 스크립트 코드를 포함한것에 있음
- 스크립트 코드는 현재 페이지와 관련된 데이터에 접근할 수 있어야함(보안 문제)
- 브라우저는 보안 검사를 시행하고 데이터의 접근을 동일 사이트의 페에지들에게만 제한
한 사이트의 모든 컨텐츠는 서로 신뢰할 수 있다는 가정하에 그 사이트에 있는 다른 컨텐츠와의 상호작용을 허용
*xss공격은 이 가정을 이용하여 다른 사이트의 데이터에 대한 접근 권한을 획득하기 위해 브라우저의 보안 검사를 회피
xss반사공격?
사이트에서 제공하는 데이터에 공격자가 악성 스크립트 코드를 포함시킴
시스템 호출과 표준 라이브러리 함수
일반적으로 프로그램은 시스템 자원을 접근하기 위해 시스템 호출을 하거나 공통의 연산을 수행할 표준 라이브러리 함수를 호출.
프로그래머들은 보통 시스템 함수들의 동작을 올바르다고 가정
- 함수들의 가정대로 올바르게 실행되지 않는 경우도 있다. 이때에도 프로그래머는 자신이 작성한 프로그램에만 집중해서 검증을 시도
- 사용자의 프로그램은 시스템이 관리하는 많은 프로그램들 중 하나로 시스템 전체적으로 공유 자원에 대한 접근을 최적화하는 과정에서 발생한 오류일 수 있음
공유 시스템 자원의 경합 조건 방지
여러 프로그램들이 공유하는 시스템 자원을 접근해야 할 때가 있음
- 메일 전송 프로그램과 매일 클라이언트는 사용자 메일박스 파일을 공유
- 웹 GCI 스크립트의 다양한 사용자들이 form 데이터값을 저장하기 위해 같은 파일을 수정
적절한 동기화 메커니즘이 필요
- 가장 일반적인 기술은 공유 파일에 대해 록을 획득하는 것으로 각 프로세스들이 순서대로 공유파일을 접근하게 함
- 가장 오래되고 일반화된 기법은 락파일을 사용하는것
락파일
프로세스가 공유 자원에 대한 접근권을 획득하려면 락파일을 생성하고 소유해야 함
락파일의 존재를 감지한 다른 프로세스는 접근권을 획득하기 위해 기존 락파일이 제거될 떄까지 기다려애함
*문제점
- 자발적인 방법으로 한 프로그램이 현재의 락파일을 무시하고 공유 자원에 접근할 경우, 시스템은 이를 막지 못함
- 이런 형태의 동기화를 사용하는 모든 프로그램은 서로 협력해야 함
- 구현 시 발생
- 락파일이 있는지 검사하고, 락파일을 생성
- 위의 두 작업을 중단 없이 동시에 함꼐 수행해야함→원자적 연산으로 구현해야함
장점:
락파일이 디렉터리에서 보이므로 락의 존재를 알 수 있다는 장점이 있음
안전한 임시 파일 사용하기
많은 프로그램들이 데이터를 처리할 때, 데이터의 임시 복사본을 저장하기 위해 임시 파일을 사용
- 대부분의 os는 임시파일을 저장하기 위해 잘 정의된 공유 시스템 영역을 제공하고, 임시 파일의 이름 부여와 생성을 위한 표준 함수도 제공
임시 파일의 이름은 유일하고, 다른 프로세스는 접근하지 않음
- 일반적으로 프로세스 ID(PID)를 이름에 포함하는데, 유일하지만 예측이 가능함→보안 문제 야기
- 공격자가 높은 권한의 프로그램이 사용하려는 임시 파일의 이름을 추정하고, 임시 파일의 존재를 검사하는 시간과 임시 파일을 생성하는 시간 사이에 공격자는 추정한 이름을 사용해 자신 소유의 임시 파일을 생성가능
*임시 파일을 안전하게 생성하고 사용하려면 임시 파일 이름을 무작위로 부여할 수 있어야 함