오염 확인

Taint checking

Taint Check는 Perl,[1] Ruby[2] 또는[3] Valerina와 같은 일부 컴퓨터 프로그래밍 언어의 기능으로 악의적인 사용자가 호스트 컴퓨터에서 명령을 실행하는 것을 방지하여 보안을 강화하도록 설계되었습니다.Taint 검사에서는 주로 SQL 주입이나 버퍼 오버플로 공격 등의 기술을 사용하여 공격을 받는 웹 사이트와 관련된 특정 보안 위험을 강조합니다.

개요

오염 체크의 배후에 있는 개념은 외부 사용자가 변경할 수 있는 변수(를 들어 웹 폼의 필드에 의해 설정된 변수)가 잠재적인 보안 위험을 발생시킨다는 것입니다. 번째 변수를 설정하는 식에서 해당 변수가 사용되는 경우 두 번째 변수도 의심됩니다.오염 검사 도구는 외부 입력의 영향을 받을 수 있는 변수 목록을 작성하여 변수를 진행할 수 있습니다.이러한 변수 중 하나가 위험한 명령어(를 들어 SQL 데이터베이스나 호스트 컴퓨터 운영 체제에 대한 직접 명령어) 실행에 사용되는 경우 오염 검사기는 프로그램이 잠재적으로 위험한 오염된 변수를 사용하고 있음을 경고합니다.그러면 컴퓨터 프로그래머는 위험한 입력 주위에 안전한 벽을 세우도록 프로그램을 재설계할 수 있습니다.

오염 체크는 비간섭의 완전한 검증 또는 보다 일반적인 보안 정보 흐름의 [4]개념에 대한 보수적인 근사치로 볼 수 있다.시스템 내의 정보 흐름은 해당 [5]시스템의 단일 실행 트레이스를 조사하는 것으로 검증할 수 없기 때문에 오염 분석 결과는 반드시 해당 [6]시스템이 적용되는 시스템의 정보 흐름 특성에 관한 대략적인 정보를 반영해야 합니다.

다음과 같은 위험한 Perl 코드는 다음 값을 확인하지 않음으로써 큰 SQL 주입 취약성을 엽니다.$name변수:

#!/usr/bin/module 나의 이름 = cgi달러->PARAM.("이름);  # 브라우저에서 이름 가져오기 ... dbh달러->{틴트인} = 1; dbh달러->실행하다("SELECT * FROM 사용자 이름 = '$name';"); # SQL 쿼리 실행 

오염 검사가 켜져 있는 경우 오염된 변수가 SQL 쿼리에서 사용되고 있기 때문에 Perl은 명령 실행을 거부하고 오류 메시지와 함께 종료합니다.오염 체크를 하지 않으면 사용자는foo'; DROP TABLE users --따라서 데이터베이스 테이블 전체를 삭제하는 명령어가 실행됩니다.오염된 $name 값을 SQL 문자열 리터럴로 인코딩하여 SQL 쿼리에서 결과를 사용하는 것이 훨씬 안전합니다.이 결과에는 위험한 명령어가 포함되어 있지 않습니다.$name평가됩니다.를 실현하기 위한 또 다른 방법은 준비된 문을 사용하여 쿼리의 모든 변수 입력을 삭제하는 것입니다.

가지 주의할 점은 Perl DBI가 다음 명령어를 설정하기 위해TaintIn데이터베이스 핸들의 속성 및 SQL [7]문자열을 확인하는 오염 모드를 활성화합니다.

역사

Perl은 버전 3.0(1989년 [8]출시) 이상의 setuid 스크립트에서 taining을 지원했지만 버전 5.0(1994년 [8]출시)이 되어서야 setuid 스크립트의 taining을 지원했습니다.-T스위치가[1] 도입되었습니다.taining을 단일 런타임으로 통합합니다.

1996년에 Netscape는 Netscape Navigator [9]3에서 JavaScript를 위한 데이터 도장을 구현했습니다.다만, 서포트는 시험적인 것으로 간주되었기 때문에, 디세이블(활성화하려면 유저의 조작이 필요)이 되어, 페이지 작성자가 스크립트를 변경할 필요가 있었습니다.다른 브라우저 벤더는 이 기능을 구현하지 않았습니다.

레퍼런스

  1. ^ a b "perlsec - Perl security". Perl 5 development team. Retrieved 2012-05-20.
  2. ^ Programming Ruby --- The Pragmatic Programmer's Guide. Addison Wesley Longman. 2001. pp. 253 (Ch. 20).
  3. ^ Inc, WSO2. "Ballerina - Taint Checking". ballerina.io. Retrieved 2022-02-15.
  4. ^ A. Sabelfeld 및 A. C. Myers, "언어 기반 정보 흐름 보안", IEEE 저널 on Selected Areas in Communications, 2003.
  5. ^ J. 리가티, L. 바우어, D.워커."자동 편집:런타임 보안 정책의 시행 메커니즘"입니다.국제정보보안저널, 2005
  6. ^ T. 데라우치와 A.Aiken. "안전 문제로서 정보 흐름의 보안"2005년 9월, 제12회 국제 정적 분석 심포지엄.
  7. ^ "DBI - Database independent interface for Perl". Retrieved 2020-08-29.
  8. ^ a b "perlhist - the Perl history records". Perl 5 development team. Retrieved 2020-08-29.
  9. ^ Flanagan, David (1997). JavaScript: The Definitive Guide (2nd ed.). O'Reilly & Associates. p. 321. ISBN 9781565922341. [...] the data-tainting security model is experimental in Navigator 3.0, and is not enabled by default. It is expected to be the default security model in version 4.0 of Navigator, however.

외부 링크