Secure Programming for Linux and Unix HOWTO
Ver 1.0/리눅스 2006/12/27 12:27
-
개인적으로 이렇게 메뉴얼 번역 하시는 분들. 귀찮고 귀찮고 또 귀찮을텐데, 대단하다.
http://kldp.org/HOWTO/html/Secure-Programs-HOWTO/index.html
차례- 1. 소개
- 2. 배경
- 1. 소개
-
- 2.1. 유닉스, 리눅스, 오픈 소스/자유 소프트웨어의 역사
-
- 2.1.1. 유닉스
- 2.1.2. 자유 소프트웨어 재단
- 2.1.3. 리눅스
- 2.1.4. 오픈 소스/자유 소프트웨어
- 2.1.5. 리눅스와 유닉스 비교
- 2.1.2. 자유 소프트웨어 재단
- 2.1.1. 유닉스
- 2.2. 보안 원리
- 2.3. 프로그래머들은 왜 비보안적인 코드를 작성하는가
- 2.4. 오픈 소스가 보안에 유리한가?
- 2.5. 보안적인 프로그램 타입
- 2.6. 편집증은 미덕이다
- 2.7. 이 문서를 작성한 이유는?
- 2.8. 설계와 구현 지침의 출처
- 2.9. 보안 정보의 다른 출처들
- 2.10. 문서 관행
- 2.3. 프로그래머들은 왜 비보안적인 코드를 작성하는가
- 3. 리눅스 및 유닉스 보안 특징들의 요약
-
- 3.1. 프로세스
-
- 3.1.1. 프로세스 속성
- 3.1.2. POSIX Capabilities
- 3.1.3. 프로세스 생성과 조작
- 3.1.2. POSIX Capabilities
- 3.1.1. 프로세스 속성
- 3.2. 파일
-
- 3.2.1. 파일시스템 객체 속성
- 3.2.2. 생성시 초기값
- 3.2.3. 접근 제어 속성 변경
- 3.2.4. 접근 제어 속성 사용
- 3.2.5. 파일시스템 계층구조
- 3.2.2. 생성시 초기값
- 3.2.1. 파일시스템 객체 속성
- 3.3. System V 프로세스간 통신
- 3.4. 소켓과 네트워크 연결
- 3.5. 시그널
- 3.6. 쿼터와 한도
- 3.7. 동적 링크 라이브러리
- 3.8. 감사
- 3.9. PAM
- 3.10. 유닉스 계열 시스템을 위한 전문적인 보안 확장
- 3.4. 소켓과 네트워크 연결
- 4. 모든 입력을 확인해라
-
- 4.1. 명령 행
- 4.2. 환경 변수
-
- 4.2.1. 몇몇 환경 변수는 위험하다
- 4.2.2. 환경 변수 저장 포맷은 위험하다
- 4.2.3. 해결방안 - 추출 및 제거
- 4.2.2. 환경 변수 저장 포맷은 위험하다
- 4.2.1. 몇몇 환경 변수는 위험하다
- 4.3. 파일 기술자
- 4.4. 파일 컨텐츠
- 4.5. 웹 기반 애플리케이션 입력 (특히 CGI 스크립트)
- 4.6. 다른 입력
- 4.7. 인간 언어 (로케일) 선택
- 4.4. 파일 컨텐츠
-
- 4.7.1. 로케일 선택 방법
- 4.7.2. 로케일 지원 메카니즘
- 4.7.3. 합법적인 값
- 4.7.4. 최종 결과
- 4.7.2. 로케일 지원 메카니즘
- 4.7.1. 로케일 선택 방법
- 4.8. 문자 인코딩
-
- 4.8.1. 문자 인코딩 소개
- 4.8.2. UTF-8 소개
- 4.8.3. UTF-8 보안 쟁점
- 4.8.4. UTF-8 합법적인 값
- 4.8.5. UTF-8 관련 쟁점
- 4.8.2. UTF-8 소개
- 4.8.1. 문자 인코딩 소개
- 4.9. 입력에서 교차 사이트의 악의있는 컨텐트를 예방해라
- 4.10. 다시 보내질 수도 있는 HTML/URIs 를 필터링해라
-
- 4.10.1. 몇몇 HTML 데이타를 제거 및 금지해라
- 4.10.2. HTML 데이타 인코딩
- 4.10.3. HTML 데이타 확인
- 4.10.4. 하이퍼텍스트 링크 (URIs/URLs) 확인
- 4.10.5. 다른 HTML 태그
- 4.10.6. 관련 쟁점
- 4.10.2. HTML 데이타 인코딩
- 4.10.1. 몇몇 HTML 데이타를 제거 및 금지해라
- 4.11. 비질의를 수행하는 HTTP GET 을 금지해라
- 4.12. 합당한 입력 시간 및 로드 레벨을 제한해라
- 4.1. 명령 행
- 5. 버퍼오버플로우 피하기
-
- 5.1. C/C++ 에서의 위험
- 5.2. C/C++ 에서의 라이브러리 솔루션
-
- 5.2.1. 표준 C 라이브러리 솔루션
- 5.2.2. 정적 및 동적 할당 버퍼
- 5.2.3. strlcpy and strlcat
- 5.2.4. libmib
- 5.2.5. C++ std::string class
- 5.2.6. Libsafe
- 5.2.7. 다른 라이브러리
- 5.2.2. 정적 및 동적 할당 버퍼
- 5.2.1. 표준 C 라이브러리 솔루션
- 5.3. C/C++ 에서의 컴파일 솔루션
- 5.4. 다른 언어
- 5.1. C/C++ 에서의 위험
- 6. 프로그램 내부 구조화 및 접근 방법
-
- 6.1. 보안적인 프로그램에 대해 훌륭한 소프트웨어 엔지니어링 원리를 따르라
- 6.2. 인터페이스를 안전하게 해라
- 6.3. 권한을 최소화해라
- 6.2. 인터페이스를 안전하게 해라
-
- 6.3.1. 허가되는 권한을 최소화해라
- 6.3.2. 권한이 사용될 수 있는 시간을 최소화해라
- 6.3.3. 권한이 필요한 시간을 최소화해라
- 6.3.4. 권한이 허가된 모듈을 최소화해라
- 6.3.5. 권한을 제한하기 위해 FSUID 사용을 고려해라
- 6.3.6. 사용할 수 있는 파일을 최소화하기 위해 Chroot 사용을 고려해라
- 6.3.7. 접근할 수 있는 데이타의 최소화를 고려해라
- 6.3.8. 사용가능한 자원의 최소화를 고려해라
- 6.3.2. 권한이 사용될 수 있는 시간을 최소화해라
- 6.3.1. 허가되는 권한을 최소화해라
- 6.4. Setuid/Setgid 스크립트 생성을 피해라
- 6.5. 안전하게 설정하고 안전한 디폴트를 사용해라
- 6.6. 안전하게 초기화값을 적재해라
- 6.7. 고장 안전
- 6.8. 경쟁 상태를 피해라
- 6.5. 안전하게 설정하고 안전한 디폴트를 사용해라
-
- 6.8.1. 시퀀싱 (비원자적) 문제
-
- 6.8.1.1. 파일시스템에서의 원자적 동작
- 6.8.1.2. 임시 파일
- 6.8.1.1. 파일시스템에서의 원자적 동작
- 6.8.2. 로킹
-
- 6.8.2.1. 로크로서 파일 사용
- 6.8.2.2. 로킹에 대한 다른 접근 방법
- 6.8.2.1. 로크로서 파일 사용
- 6.9. 단지 신뢰할 수 있는 체널만 신뢰해라
- 6.10. 신뢰된 경로를 설정해라
- 6.11. 내부의 일관성을 검사하는 코드를 사용해라
- 6.12. 스스로 자원을 제한해라
- 6.13. 교차 사이트의 악의있는 컨텐트를 예방해라
- 6.10. 신뢰된 경로를 설정해라
-
- 6.13.1. 문제 설명
- 6.13.2. 교차 사이트의 악의있는 컨텐트에 대한 해결방안
- 6.13.1. 문제 설명
- 6.14. 데이타 타입에 주의해라
- 6.1. 보안적인 프로그램에 대해 훌륭한 소프트웨어 엔지니어링 원리를 따르라
- 7. 다른 자원을 주의깊게 호출해라
-
- 7.1. 안전한 라이브러리 루틴만 호출해라
- 7.2. 호출을 합당한 값으로 제한해라
- 7.3. 프로그래머가 사용하도록 의도된 인터페이스만 호출해라
- 7.4. 모슨 시스템 호출 반환을 검사해라
- 7.5. vfork(2) 사용을 피해라
- 7.6. 내장된 컨텐트를 검색할 때 웹버그에 대처해라
- 7.7. 기밀을 다루는 정보를 숨겨라
- 7.2. 호출을 합당한 값으로 제한해라
- 7.1. 안전한 라이브러리 루틴만 호출해라
- 8. 정보를 신중하게 되돌려줘라
-
- 8.1. 피드백을 최소화해라
- 8.2. 주석을 포함하지 마라
- 8.3. 완전한/무반응의 출력을 다뤄라
- 8.4. 데이타 포맷팅을 제어해라 (문자열 포맷)
- 8.5. 출력에서 문자 인코딩을 제어해라
- 8.6. 포함/설정 파일 접근을 예방해라
- 8.2. 주석을 포함하지 마라
- 8.1. 피드백을 최소화해라
- 9. 언어에 특정적인 쟁점
- 10. 특별 주제
-
- 10.1. 패스워드
- 10.2. 웹에서 인증
-
- 10.2.1. 웹에서 인증: 로그인
- 10.2.2. 웹에서 인증: 일련의 행동
- 10.2.3. 웹에서 인증: 로그아웃
- 10.2.2. 웹에서 인증: 일련의 행동
- 10.2.1. 웹에서 인증: 로그인
- 10.3. 난수
- 10.4. 사용자가 기억하는 비밀 (패스워드 및 키) 을 특히 보호해라
- 10.5. 암호화 알고리듬 및 프로토콜
- 10.4. 사용자가 기억하는 비밀 (패스워드 및 키) 을 특히 보호해라
-
- 10.5.1. 암호학적 프로토콜
- 10.5.2. 대칭키 암호화 알고리듬
- 10.5.3. 공개키 알고리듬
- 10.5.4. 암호학적 해시 알고리듬
- 10.5.5. 무결성 검사
- 10.5.6. 다른 암호학적 쟁점
- 10.5.2. 대칭키 암호화 알고리듬
- 10.5.1. 암호학적 프로토콜
- 10.6. PAM 사용
- 10.7. 도구
- 10.8. Windows CE
- 10.9. 감사 레코드 작성
- 10.10. 기타
- 10.7. 도구
- 10.1. 패스워드
- 11. 결론
- 12. 문헌 목록
- A. 책 발표 기록
- B. 감사의 글
- C. 문서의 라이센스
- D. GNU Free Documentation License
- E. 승인
- F. 저자
- 12. 문헌 목록
- 표 목록
- 4-1. 합법적인 UTF-8 시퀀스
- 그림 목록
- 1-1. Abstract View of a Program



