개인 재정 C ++ 프로그래밍 : 10 개의 해커 팁

C ++ 프로그래밍 : 10 개의 해커 팁

차례:

비디오: 10강 사용자 입력받기 2024

비디오: 10강 사용자 입력받기 2024
Anonim

C ++ 프로그래머는 C ++ 코드에서 해커에게 취약한 프로그램을 작성하지 않도록해야한다. 또한 ASLR (Address Space Layout Randomization) 및 DEP (Data Execution Prevention)와 같이 운영 체제가 지원할 경우 사용할 수있는 기능에 대해서도 설명합니다.

사용자 입력에 대해 가정하지 마십시오.

프로그래머의 터널 비전은 초기 개발 단계에서 괜찮습니다. 그러나 어떤 시점에서 프로그래머 (또는 더 나아가 코드 개발과 관련이없는 다른 프로그래머)는 앉아서 즉각적인 문제를 잊어 버릴 필요가 있습니다. 그녀는 스스로에게 "이 프로그램이 불법 입력에 어떻게 반응 할 것인가? "

다음은 입력 확인 규칙 중 일부입니다.

  • 입력 길이에 대한 가정하지 않습니다.

  • 고정 길이 버퍼 (또는 가변 크기 버퍼 사용)보다 많은 입력을 허용하지 마십시오.

  • 모든 숫자 값의 범위가 올바른지 확인하십시오.

  • 해커가 코드를 삽입하는 데 사용할 수있는 특수 문자를 확인하고 필터링합니다.

  • 원시 입력을 다른 서비스 (예: 데이터베이스 서버)로 전달하지 마십시오.

그리고 원격 서비스에서 반환 된 값에 대해 동일한 검사를 수행합니다. 해커는 입력측에 있지 않을 수도 있으며 응답 측에있을 수도 있습니다.

정상적으로 처리 실패

프로그램은 프로그램 내에서 발생하는 오류에 대해 적절하게 대응해야합니다. 예를 들어, 라이브러리 함수 호출이 nullptr을 반환하면 프로그램은이를 감지하고 적절한 것을 수행해야합니다.

는 상당히 자유롭게 이해되어야한다. 이 프로그램은 왜 함수가 합리적인 주소를 반환하지 않았는 지 정확히 파악하기 위해 주위를 조사 할 필요가 없습니다. 불합리한 입력으로 인해 요청이 너무 많은 메모리에 대한 것이었을 수 있습니다. 또는 생성자가 어떤 유형의 불법 입력을 감지했을 수 있습니다. 중요하지 않습니다. 핵심은 힙과 같은 기존 데이터 구조를 손상 시키거나 손상시키지 않고 프로그램이 최상의 상태로 상태를 복원하고 입력의 다음 비트를 설정해야한다는 것입니다.

프로그램 로그 유지

보안 오류 발생시 일어난 일을 누군가가 재구성 할 수 있도록 런타임 로그를 생성하고 유지 관리합니다. (사실, 어떤 유형의 실패가 발생하는 경우에도 마찬가지입니다.) 예를 들어, 누군가가 시스템에 로그인하거나 로그 아웃 할 때마다 로그를 기록하려고합니다.

보안 이벤트가 발생했을 때 누가 시스템에 로그인했는지 정확하게 알고 싶습니다. 보안 상 가장 위험한 그룹이며 범인을 찾을 때 가장 의심스러운 그룹입니다.또한 대부분의 예외를 포함하는 시스템 오류를 기록하려고합니다.

실제 프로덕션 프로그램에는 다음과 같은 많은 호출이 들어 있습니다.

log (DEBUG, "User % s entered legal password", sUser);

이것은 단지 예일뿐입니다. 모든 프로그램에는 일종의 로그 기능이 필요합니다. 실제로 log ()가 호출되는지 여부는 중요하지 않습니다.

좋은 개발 프로세스 따르기

모든 프로그램은 잘 짜여진 공식 개발 프로세스를 따라야합니다. 이 프로세스에는 최소한 다음 단계가 포함되어야합니다.

보안 요구 사항을 포함하여 요구 사항을 수집하고 문서화합니다.

  • 검토 디자인.

  • 코딩 표준 준수.

  • 단위 테스트를받습니다.

  • 원래의 요구 사항을 기반으로 한 공식 수용 테스트를 실시하십시오. 또한, 요구 사항, 설계, 코드 및 테스트 절차가 고품질이며 회사 표준을 충족하는지 확인하기 위해 핵심 검토에서 동료 검토가 수행되어야합니다.

  • 좋은 버전 제어 구현

버전 제어는 이상한 일입니다. 버전 1.에 대해 걱정하지 않는 것이 당연합니다. 버전 1을 문 밖으로 나가고 대기중인 사용자가 뻗은 손에 넣기 위해 총을들이는 순간입니다. 그러나 버전 제어는 프로그램의 초기 설계에 빌드되어야하고 나중에 적용되지 않기 때문에 일찍 처리해야하는 중요한 주제입니다.

버전 제어의 한 가지 중요한 점은 사용자가 어떤 버전의 프로그램을 사용하고 있는지를 파악하는 것입니다. 사용자가 전화를 걸고 "클릭하면이 작업을 수행합니다"라고 말하면 헬프 데스크는 실제로 사용자가 사용하고있는 프로그램 버전을 알아야합니다. 그는 현재 버전에서 이미 수정 된 자신의 버전에있는 문제를 설명 할 수 있습니다.

사용자를 안전하게 인증합니다.

사용자 인증은 간단해야합니다. 사용자가 계정 이름과 암호를 제공하고 프로그램이 계정 이름을 테이블에서 찾아 암호를 비교합니다. 암호가 일치하면 사용자가 인증됩니다. 그러나 해킹 방지에 관해서는 그다지 간단하지 않습니다.

먼저 비밀번호를 데이터베이스에 저장하지 마십시오. 이것은

로 저장하는 것으로 불리며 매우 나쁜 형태로 간주됩니다. 해커가 암호 파일을 손쉽게 얻을 수 있습니다. 대신 암호의 안전한 변환을 저장하십시오. 원격 세션 관리 모든 응용 프로그램이 단일 컴퓨터에서 실행될 때 특정 가정을 할 수 있습니다. 일단 사용자가 자신을 인증하면 다른 사람으로 변형되는 것에 대해 걱정할 필요가 없습니다. 원격 서버와 통신하는 응용 프로그램은 이러한 가정을 할 수 없습니다. 회선에서 수신 대기하는 해커는 사용자가 자신을 인증하고 세션을 가로 챌 때까지 기다릴 수 있습니다.

이 상황을 피하기 위해 보안에 신경을 쓴 프로그래머는 무엇을 할 수 있습니까? 연결이 도용되지 않았는지 확인하기 위해 반복적으로 사용자에게 암호를 묻는 것을 원하지는 않습니다. 다른 해결책은

세션을 수립하고 관리하는 것입니다.

사용자가 성공적으로 자신을 인증하면 서버가 세션 쿠키를 원격 응용 프로그램에 보내 게합니다. 코드 난독 화 코드 난독 화

는 해커가 가능한 한 이해하기 어렵도록 실행 파일을 작성하는 행위입니다.

논리는 간단합니다. 해커가 코드 작동 방식을 더 쉽게 이해할수록 해커가 취약점을 쉽게 파악할 수 있습니다. 가장 쉬운 방법은 디버그 기호 정보가 포함되지 않은 릴리스 버전의 프로그램 만 배포하는 것입니다. 프로젝트 파일을 처음 만들 때 디버그 및 릴리스 버전을 모두 선택해야합니다.

포함 된 기호 정보를 사용하여 응용 프로그램의 버전을 절대 배포하지 마십시오.

디지털 인증서로 코드 서명

코드 서명은 실행 코드의 안전한 해시를 생성하고 유효한 인증 기관에서 발급 한 인증서와 결합하여 작동합니다. 프로세스는 다음과 같이 작동합니다. 프로그램을 만드는 회사는 먼저 자체를 인증 기관 중 하나에 등록해야합니다.

인증 기관이 내 회사가 유효한 소프트웨어 실체라고 확신하면 인증서를 발급합니다. 이것은 누구든지이 인증서 보유자가 샌 안토니오의 유명한 My Company임을 확인하는 데 사용할 수있는 긴 번호입니다.

필요한 경우 안전한 암호화 사용

좋은 경고와 마찬가지로이 경고에는 여러 부분이 있습니다. 첫째, "필요하다면 암호화를 사용하십시오. "이것은 인터넷을 통해 은행 계좌 정보를 전달하려는 생각을하게하는 경향이 있지만 그보다 더 일반적인 생각을해야합니다.

인터넷을 통해 또는 더 작은 범위에서 통신중인 데이터는 일반적으로

동작중인 데이터로 알려져 있습니다.

해커가 아무런 소용이없는 경우를 제외하고는 Motion in Data를 암호화해야합니다. 디스크에 저장된 데이터는 나머지 데이터로 알려져 있습니다.

이 데이터는 디스크를 분실, 도난 또는 복사 할 가능성이있는 경우 암호화해야합니다. 기업은 노트북이 공항의 보안 스캐너를 도난 당하거나 어딘가에서 택시를 탈 때에 회사의 랩톱에서 하드 디스크를 정기적으로 암호화합니다. 엄지 드라이브와 같은 소형 휴대용 저장 장치는 특히 손실 될 위험이 있습니다. 이러한 장치의 데이터는 암호화되어야합니다.

C ++ 프로그래밍 : 10 개의 해커 팁

편집자의 선택

Dragon Go! iPhone 및 iPad 용 앱 - 인형

Dragon Go! iPhone 및 iPad 용 앱 - 인형

Dragon Search를 사용하시는 분이라면 Dragon Go를 사용하는 것이 좋습니다! Nuance는 iPhone 3GS, iPhone 5, iPhone 4, iPod touch (3 세대), iPod touch (4 세대) 및 iPad에서 사용할 수 있도록 무료로 다운로드 할 수있는이 앱을 만들었습니다. (iOS 4.0 이상이어야합니다.) Android 기기에서도 사용할 수 있습니다. 드래곤가! ...

드래곤에서 피할 수있는 10 가지 실수 말하기 - 인형

드래곤에서 피할 수있는 10 가지 실수 말하기 - 인형

모두가 실수를 저지르고 어떤 사람들은 정말 크고 재미있게 만든다. 실수. NaturallySpeaking을 사용하여 많은 실수를 저 지르므로 때때로 수시로 일부를 만들 수도 있습니다. 내가 묻는 것은 다음과 같습니다. 내가 미리 짐작했던 10 가지 분명한 실수를하지 마십시오. 원래의 수. 창조적으로 행동하십시오. 거기서 나가서 ...

NaturallySpeaking을위한 10 가지 시간 절약 팁 - 인형

NaturallySpeaking을위한 10 가지 시간 절약 팁 - 인형

때로는 잘하고 그냥 사용하는 것의 차이 새로운 소프트웨어는 더 지혜롭고 경험 많은 스승의 충고 한 부분입니다. 누군가가 당신에게 전에 말했었 으면 좋을 10 가지가 있습니다. 대화 상자의 단축키 사용 대화 상자, 라디오 버튼, 확인란의 다양한 기능 ...

편집자의 선택

Google SketchUp 8에서 새로운 지형 모델을 만드는 법 - Google에서 모델링 할 때 인형

Google SketchUp 8에서 새로운 지형 모델을 만드는 법 - Google에서 모델링 할 때 인형

SketchUp을 사용하면 지형을 만들어야 할 수 있습니다. 건물에 대한 패치를 모델링하든 센트럴 파크를 다시 디자인하든 기존 데이터로 지형을 모델링 할 수 있습니다. 기존 데이터는 일반적으로 등고선 또는 토폴 라인 형태로 도착합니다. 지형지도에서 볼 수있는 삐걱 거리는 선을 알고 있습니다.

SketchUp에서 드레이프로 경로와 도로를 만드는 법 - 스케치 업에서 드레이프 도구

SketchUp에서 드레이프로 경로와 도로를 만드는 법 - 스케치 업에서 드레이프 도구

드레이프 도구가 작동 함 쿠키 커터와 조금 같다. 그것을 사용하여 객체의 가장자리를 직접 그 아래에있는 다른 표면으로 전송합니다. 아마도 당신은 부드럽게 경 사진 지형을 가지고 있으며, 당신은 그것에 사행 경로를 그리기를 원할 것입니다. 경로는 윤곽선을 따라야합니다.

SketchUp 모델을 3D 인쇄 용 부품으로 자르는 방법 - 인형

SketchUp 모델을 3D 인쇄 용 부품으로 자르는 방법 - 인형

SketchUp 모델 자르기 Intersect Faces 도구를 사용하여 그룹을 결합하는 것과 매우 유사합니다. 더 큰 오브젝트와 교차하여 커팅의 새 가장자리가 될 커터로 지오메트리를 사용할 것입니다. 모델이 매우 단순하고 SketchUp을 사용하는 경우 ...

편집자의 선택

Route Prefix를 사용하여 Junos - dummy에서 라우팅 필터를 생성하는 방법

Route Prefix를 사용하여 Junos - dummy에서 라우팅 필터를 생성하는 방법

라우팅 정책은 특정 경로가 라우팅 테이블에 수용되거나 일부 인접 라우터에 보급되는 것을 방지하기위한 것입니다. 경우에 따라 특정 경로 또는 경로 집합을 일치시키는 것이 유용 할 수 있습니다. 이렇게하려면 경로 필터를 사용합니다. 경로 필터는 특정 IP 주소 또는 접두어 범위에서 일치합니다. ...

Junos 라우터에서 COS의 코드 포인트 별명을 사용하는 방법 - 인형

Junos 라우터에서 COS의 코드 포인트 별명을 사용하는 방법 - 인형

전달 수업은 고통 스러울 수 있습니다. 더 좋은 방법은 코드 포인트 별칭을 사용하는 것입니다. CoS (Class of Service) 정책을 결정할 때 비트 패턴을 지정하는 대신 비트 패턴을 나타내는 별칭 이름을 정의 할 수 있습니다. 이러한 별칭을 코드 포인트 별칭이라고합니다. 간단히 말하자면 코드 포인트를 사용하십시오 ...

Junos 라우팅 정보를 요약하는 방법 - 더미

Junos 라우팅 정보를 요약하는 방법 - 더미

때때로 라우팅 정보를 간단하게 요약 할 수 있습니다 라우터. 예를 들어, 네트워크에서 OSPF를 방금 구성 했으므로 라우팅 테이블에 특정 수의 OSPF 경로가 표시 될 것으로 예상됩니다. show route summary 명령을 실행하여 모든 경로를 볼 수 있습니다 ...