본문 바로가기
프로그래밍/Code Craft

[2부 코드의 비밀스러운 일생] Chapter12 불안전 콤플렉스

by Ohdumak 2017. 11. 15.

안전한 소프트웨어를 구축할 책임은 누구에게 있을까?

골칫덩어리는 우리의 것이다!

 

위험

도둑이 랩톱이나  PDA 훔쳐서 보안이 민감한 데이터를 읽을 있다

결함이 있는 입력 루틴이 악용되면 많은 종류의 손상을 일으킬 있다

권한 상승이란 제한된 접근 권한을 가진 사용자가 시스템을 속여 보안 수준을 얻는

통신을 , 데이터가 암호화되지 않은 상태로 불안전한 매체를 통과하면 도중에있는 모든 컴퓨터가 데이터를 빨아들여서 읽을 있다

보안이 코드 작성뿐만 아니라 시스템 관리와도 관련이 있다

조심성 없는 사용자가 쓸데없이 시스템을 열어두어서 공격 받기 쉬운 상태로 내버려둘 있다

시스템에 대한 접근 허용을 느슨하게 설정해 두면 사용자들이 시스템의 민감한 부분에 접근 있다

 

컴퓨터 시스템이 복잡할수록 보안 취약점이 생길 가능성은 높아진다. 단순하게 작성하자.

 

반대편

안전한 소프트웨어를 작성하기 위한 전쟁에서는, 싸우는 상대가 누구인지 중요하다

 

보안에 관한 지식

결함, 취약점, 엑스플로잇

 

보안 취약점을 무시하면서 천하무적인 하지 말자.

 

크래커

컴퓨터 시스템에 인증되지 않은 접근을 하기 위해 고의로 취약점을 악용하는 사람

해커

실제로는 코드를 해킹하는 사람

화이트

자기가 하는일이 사회에 도움이 된다고 믿는 사람

블랙

컴퓨터 시스템을 악용하기를 즐기는 어두운 변두리 출신 프로그래머

 

변명, 변명

코드는 모든 요구사항을 만족시켜야 하고, 보안고 같은 그밖의 "별로 중요하지 않은"일에는 집중할 시간이 거의 없다고 말한다…

우리는 개발에 착수할 때부터 안전한 설계를 해야하고, 개발 과정과 스케줄에도 안전을 주입해야 한다

 

취약점의 감지

불안전한 설계와 아키텍처

가장 근본적인 결함

아키텍처 수준에서 보안을 고려하지 않으면 모든 곳에서 보안에 관한 죄악을 저지르게 된다

버퍼 오버런

버퍼가 스텍에 위치할 , 오버런을 악용하기가 가장 쉽다

임베디드 쿼리 스트링

제대로 걸러지지 않은 입력을 프로그램이 다음에 하는 일에 악용하는 공격

경합 상태

시스템이 이벤트의 미묘한 순서에 의존하면, 의도하지 않은 동작을 일으키거나 코드에 악용이 가능

정수 오버플로

뺄셈연산(이때는 정수 언더플로), 부호가 있는 타입과 없는 타입이 섞여있는 대입, 잘못된 타입 캐스트, 곱셈이나 나눗셈에서도 일어날 있다

 

안전을 위해서라면

시스템 설치

소프트웨어 시스템 설계

프로그램 구현

시스템의사용 절차

 

항상 보안과 기능 사이의 절충이 필요하다

이런 보안 요구사항이 아주 명확해야 한다

 

시스템 설치 테크닉

당신의 컴퓨터 시스템에서는 신용 있는 소프트웨어만 설치

시스템 설계 테크닉

보안은 모든 소프트웨어 아키텍처에서 본질적으로 중요한 요소이다

소프트웨어가 공격을 받을 것을 예상하자

코드 구현 테크닉

방어적 프로그래밍

보안감사 실시

차일드 프로세스를 만들때 아주 조심하자

무자비하게 테스트하고 디버깅 하자

절차적인 테크닉

사용자는 반드시 안전하게 작업하는 습관을 배워야 한다

 

좋은 프로그래머는…

자기가 일하는 프로젝트의 보안 요구사항에 대해 알고 있다

본능적으로 일반적인 보안 취약점을 피하면서 코드를 작성한다

시스템 가각에 대해 보안을 설계한다; 보안을 마지막에 끼워 넣지 않는다

보안을 테스트하는 전략을 가지고 있다

나쁜 프로그래머는…

보안이 별로 중요하지 않다고 간단하게 결론을 내버린다

자기가 보안 전문가라고 생각한다

취약점이 발견되었을 , 나쁜 경우로는 자기 코드가 손상되었을 , 자기 크로그램에 있는 보안 결함에 대해서만 생각한다

코드를 작성할 때만 보안에 초점을 맞추고, 설계나 아키텍처수준에서는 보안을 무사한다.


728x90

댓글