2009-06-16 3 views
4

나는 Process.Start를 사용하여 동일한 PC에서 실행되는 내부적으로 개발 된 다른 .NET 응용 프로그램을 시작하는 .NET Windows 응용 프로그램을 만들고 있습니다. 사용자 ID와 암호를 포함한 데이터베이스 연결 정보를 대상 응용 프로그램에 전달해야합니다. 나는 그것을 보내기 전에 정보를 암호화 할 필요가 있는지 결정하려고합니다.중요한 데이터를 .NET 프로세스의 Process.Start 호출에 전달해야합니까?

최종 사용자의 PC가 손상되지 않는다고 가정하면 인수에 암호화되지 않은 상태로 전달하면 연결 정보가 어디서나 노출됩니까? 이 괜찮을 같은

겠습니까 뭔가 ...

string myExecutable = "myApp.exe"; 
string server = "myServer"; 
string database = "top_secret_data"; 
string userID = "myUser"; 
string password = "ABC123"; 
string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password); 
ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo); 
Process.Start(startInfo); 

아니면 내가 이런 식으로 뭔가를 사용해야합니다 ...

var crypto = new MySymmetricCryptoLib.Crypto(); 
string myExecutable = "myApp.exe"; 
string server = crypto.Encrypt("myServer"); 
string database = crypto.Encrypt("top_secret_data"); 
string userID = crypto.Encrypt("myUser"); 
string password = crypto.Encrypt("ABC123"); 
string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password); 
ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo); 
Process.Start(startInfo); 

답변

4

프로세스가 호출 된 것을 인수를 가져 오는 매우 간단합니다 그래서 그들은 기술 지향적 인 사용자에게 로컬로 노출 될 것입니다. 그것이 당신에게 문제가되지 않는다면, 걱정할 필요가 없습니다. 네트워크를 통해 전송하지 않는다고 말하면서, 당신의 질문은 우리에게 기계가 손상되지 않았다고 가정하기 때문입니다.

2

데이터를 보호하려는 사람의 질문에 분명하지 않습니다. PC가 손상되지 않았다고 가정했기 때문에 혼란 스럽습니다.

컴퓨터에서 로컬 프로세스를 시작하고 컴퓨터가 손상되지 않은 경우 보호 할 대상은 무엇입니까? 아무도이 시나리오에서 네트워크를 가로 지르지 않으므로 아무도 인수를 염탐 할 수 없습니다.

그러나 컴퓨터 또는 사용자가 잠재적으로 데이터를 볼 수있는 관리자 권한이있는 사용자가 염려되는 경우 암호화해야합니다. 프로세스의 명령 행 인수를 보는 것은 상당히 쉽습니다. 어떤 반 유능한 사용자라도이를 찾을 수 있습니다.

+0

좋은 점. 명확히하기 위해 나는 특정한 "from"을 염두에 두지 않았다. 이 데이터를 암호화되지 않은 상태로 전달할 일반적인 위험을 파악하고 데이터가 노출 될 수있는 상황의 유형을 확인하려고했습니다. –

0

복호화를 수행하기 위해 수신 응용 프로그램을 수정해야하므로 구성 파일에서 읽을 수신 응용 프로그램을 수정 한 다음 encrypt the config file을 읽는 것이 좋습니다. 다른 앱에 다른 값을 전달해야한다면 connectionString 키를 전달하지 않으시겠습니까?

+0

좋은 질문입니다. 이 질문에 이것을 지정하지 않았지만 연결 정보가 매우 다양합니다. 사용자 및 환경에 따라 다릅니다. –

+0

따라서이 로직을 두 번째 앱에 캡슐화 할 수 없습니까? – RichardOD

+0

그게 일반적으로 좋은 생각이지만, 여기서 설명 할 수없는 이유 때문에,이 경우 옵션이 아닙니다. –

1

나는 개별적인 조각이 아닌 전체 문자열을 암호화 하겠지만, 기본적으로 잡다한 사용자에게 여기에 연결 정보가 있다는 것을 말해 주었다. 또 다른 옵션은 일단 다른 응용 프로그램이 시작되면 인수를 전달하는 것입니다.

건물 보안이 공격이 무엇인지 (데이터베이스에 대한 연결 정보에 대한 액세스 권한을 얻음) 공격을 식별 할 때 중요합니다. 로컬 사용자가이 작업을 수행하지 못하게하려고합니까? 일반 사용자 또는 전문가 사용자를 차단하려고합니까?

예를 들어 전문가는 프로세스의 메모리를 덤프하고 암호화되지 않은 문자열을 찾을 수 있습니다.

1

명명 된 파이프를 사용하고 적절하게 ACL을 설정 한 다음 하위 프로세스에서 핸들을 상속 받도록하십시오. 암호화는 걱정하지 마십시오.

관련 문제