2010-12-15 3 views
0

매우 안전해야하는 코드 작성법을 배우려면 어디로 가야합니까? 표준 Windows 또는 Linux OS에서 실행되는 외부 서비스를 노출합니다. 안전하게 노출 될 수있는 서비스와 알 수없는 서비스가 문제의 일부일 수 있습니다. 리눅스와 윈도우 사이에서 마음에 드는 선택을 찾지는 않는다. 왜냐하면 선택이 내 경우에는 가능하지 않기 때문이다. 그러나 보안 수준은 군사 등급이어야합니다.매우 안전해야하지만 표준 Windows 또는 Linux OS에서 실행되는 외부 서비스를 노출하는 코드를 배우려면 어디로 가야합니까?

예를 들어, 나는 이것을 거의 포기한다고 느낀다.하지만 그런 환경에서 내가 WCF를 사용할 수 있는지를 어떻게 알 수 있을까?

+1

"군대 급"은 더 이상 의미가없는 것처럼 보입니다. – NotMe

+2

저는 "변호사 급"이라는 용어를 선호합니다 - 그들은 대부분의 경우 정부보다 당신을 튀길 의무가 더 큽니다. – thkala

+2

'매우 안전함'은 의미있는 용어가 아닙니다. 귀하의 질문에 대한 답변이있는 경우, 귀하가 안심시키는 자산 (정보 통제), 귀하가 우려하는 위협, 그리고 어떤 경제적 비용이 위반과 관련이 있는지에 따라 다릅니다. 일반적으로 보안에 대한 가장 큰 위협은 당신이이란 핵 기술 부서이거나 다른 이스라엘인들을 괴롭 히지 않는 한 사회 공학 및/또는 부패한 웨어웨어 (데이터를 도용하거나 항구를 여는 사람)가 아닌 맬웨어가 아닙니다. – bmargulies

답변

2

높은 보안은 일반적으로 작성한 코드 그 이상을 포함하기 때문에 어려운 개념입니다.

기본적으로 OSI model의 모든 레이어를 고려해야합니다. 종점 (quantum cryptography) 사이의 데이터 스트림 (또는 다시 라우팅되는) 캡처를 방지합니다. 더 높은 수준에서

, 당신은 장치의

  1. 물리적 보안 (모든 엔드 포인트 가능한 경우)과 같은 여러 가지 같은 것들이 있습니다.
  2. OS 강화 (예 : 포트 닫기, 사용하지 않는 서비스 끄기, Kerberos 사용, VPN 터널 사용, 연결 허용 된 시스템의 화이트리스트 사용 등).
  3. 휴식 (파일 암호화), 전송 (SSL) 및 메모리 (열/테이블 암호화)에서 데이터 암호화.
  4. 모든 수준 (app, sql 등)에서 적절한 인증 및 권한 부여를 보장하고 적용합니다.
  5. 모든 것을 기록하십시오. 최소에서는 "누가/무엇을 언제/어디서/어떻게"라고 대답해야합니다.
  6. 로깅과 함께 적극적으로 모니터링하십시오. 일명 : 침입 탐지.

그런 다음 우리는 당신이이 모든 일을 한 일단 준비 등 SQL 인젝션, XSS, 내부/불만을 품은 직원,

을 같은 다른 공격을보고 같은 다른 것들로 이동할 수 있습니다 때 해커는 단순히 사회 공학이 원하는 모든 것을 없애 버립니다. 간단히 말해, 컴퓨터 관련 응용 프로그램의 보안을 유지하기 위해 취해야 할 가장 좋은 방법은 폭스 멀더 (Fox Mulder)의 정신을 경청하고 아무도 신뢰하지 않는 것입니다. 적용되는 나의 또 다른 마음에 드는 사람은 : 그들이 당신 후에이지 않는 경우에 편집증 만이다.

+0

네, 그렇습니다. 내가 쓰지 않은 코드는 정확히 나를 염려합니다. 내가 실수 할 수는 없지만, 가장 중요한 것이 보이지 않는 실수 (해킹 스타일 : 착취 기술). 그러나 돈이 단지 (예를 들어, 내가 쓰지 않는 한) 체와 같이 은행 계좌에서 사라지는 것이 아니기 때문에 적어도 은행은 합리적인 보안 및 군사, 국세청 등을 달성했습니다. 숨겨진 모든 계층 , 그들은 그걸 어떻게 햇어? 나는 그것을 어떻게 배우는가? –

+1

@ 존 : 귀하의 첫 번째 단계는 위에있는 키워드를 연구하는 것입니다. 예 : 파일 암호화, SQL 서버 암호화 등이 있습니다. 이들 각각은 다른 연구 영역을 열어 줄 경로를 이끌 것입니다. 살펴볼 또 다른 영역은 metasploit와 같은 앱 크래킹을위한 최신 툴킷입니다. 보안을 올바르게 구현하는 방법에 대해 배운 모든 내용은 사이트, 앱 등을 해독하는 방법을 처음 배우는 것으로 시작되었습니다. 무언가를 취할 수있는 무수한 방법을 이해하면이를 보호하는 방법을 이해하기 시작할 것입니다. – NotMe

+1

"모든 것을 기록하십시오"와 조심하십시오. 로그 항목을 사용하여 서버의 HD를 채우는 서비스 거부 공격을 만드는 것은 쉽습니다. 또는 합법적 인 문제를 찾기가 어려울 수 있습니다. – Gabe

0

글쎄, 어디서 간단히 대답 할 수 있는지에 대한 질문. 학교에는 없습니다. 자신을위한 학습 경로를 만드는 것이 좋습니다. 원하는 기술을 골라 내고 배웁니다. 시작하기에 앞서 기본적인 책은 충분하지만 나머지 부분은 배우면서 읽거나 기술 문서를 통해 충분해야합니다.

예를 들어 - .NET (Microsoft)에서 학습하는 것은 기본 A-Press 텍스트 북 (Pro C# 및 .NET 4.0 플랫폼을 제안 함)을 포함합니다. MSDN에서 .NET Framework Reference를 검색하면 나머지는 제공됩니다.

WCF 참조를 찾고 있다면 (MCTS 시험 70-503, Microsoft .NET Framework 3.5 Windows 통신 기반) 및 MSDN을 제안합니다.

그냥하지 단일 기술이 당신이 찾고있는 무엇을 달성 할 수 있음을 유의하십시오. 예를 들어 WF (Windows Workflow Foundation)와의 WCF co-mingles 및 SQL Data Services 및 Entity Framework. 여러 기술에 노출되면 비전이 확실히 확대됩니다.

============================================== =================================

WCF이 점에서 동물이다.

메시지 (데이터)의 끝점간에 전달 메시지 레벨 보안 (암호화)를 통해 고정 될 수있다 : 여기에서 통신 수단을 통해 다른 장점이다. 선택한 전송 채널은 전송 계층 보안 (암호화)을 통해 프로토콜 수준에서 보안 될 수 있습니다.

끝점 자체는 클라이언트를 인증하고 가장 할 수 있습니다 (클라이언트 수준 보안). 엔드 투 엔드 서비스 추적, 상태 모니터링 & 성능 카운터, 메시지 로깅, 최신/이전 클라이언트와의 호환성 (WCF에서 제공되는 메시지 형식의 정상적인 성능 저하를 통해)을 구현할 수 있습니다. 이렇게 선택한 경우 통신 채널에 대해 라우팅을 페일 세이프 (fail-safe)로 구현할 수도 있습니다. 또한 WCF는 트랜잭션 당 (ACID), 동시성 및 인스턴스 단위 스로틀 링을 지원하므로 보안/강력한 군사 등급 코드를 작성할 때 유연성이 가장 뛰어납니다.

회상에서 WCF의 보안과 유연성은 놀랍습니다. 비슷한 기술이 WS-Security 사양입니다. 웹 서비스의 WS- * 사양의 일부이며 XML 서명과 XML 암호화를 사용하여 두 종점간에 보안 통신 채널을 제공합니다.

그러나 WS- *의 단점은 단방향 통신 수단이라는 것입니다. WCF는 양방향 통신을 용이하게 할 수 있습니다. 클라이언트는 서버에 요청을 보낼 수 있지만 서버는 클라이언트에 요청을 보낼 수 있습니다. WS- *는 클라이언트가 서버로만 응답을 보내고받을 수 있다고 지시하지만 그 반대는 아닙니다. 나는 WCF 개발자 아니다

그래서 내가 하이라이트는 자신의 연구를하고로 당신을 자극 할 수 생각했다. "동물을 다듬는 방법은 수백 가지가 있으며 어느 것도 잘못이 아닙니다 ..."

1

formal methods을 사용하면 소프트웨어의 중요한 부분을 증명할 수 있습니다. Frama-C (무료, LGPL 라이센스, 임베디드 시스템을 타깃으로하는)과 같은 도구가 적합 할 수 있습니다 (최소한 소프트웨어가 중요하고 임베디드 된 C 언어로 작성된 경우).

그러나 군사 등급은별로 의미가 없습니다. 귀하의 고객은 (그리고 이어야합니다) 존중하는 기준을 정확하게 정의합니다. 예를 들어, 중요한 민간인 항공기 소프트웨어는 DO-178C (또는 그 전신 인 DO-178B)과 같은 것을 따라야합니다. 각 산업마다 다른 표준이 있습니다. (철도 및 의료 산업은 모두 자체 표준을 가지고 있으며 북미와 유럽에서 다를 수 있습니다).

시스템 (& 클라이언트)의 요구량이 적 으면 (즉, 버그로 인해 수십억 달러 또는 수백 명의 사람들이 위협을 당함) 컴파일러를 사용자 정의하거나 다른 도구를 사용할 수 있습니다. 예를 들어, GCC은 플러그인을 통해 또는 MELT 확장을 통해 사용자 정의 할 수 있습니다.

은 해당 소프트웨어의 신뢰성은 큰 가격 (즉, 클라이언트에 대한 따라서, 당신을 위해 큰 비용을 의미)가 잊지 마세요.

관련 문제