소프트웨어 보안은 보안 소프트웨어가 아닙니다. 여기서는 인증, 액세스 제어, 기밀성, 암호화, 권한 관리 등의 항목에 대해 설명합니다.
NSURLConnection
개체, NSURLSession
개체 또는 NSURLDownload
개체 대리자의 책임입니다. NSURLCredential
을 초기화합니다.
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * credential)) completionHandler {
...
[challenge.sender useCredential:[NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
...
}
NSURLConnection
개체, NSURLSession
개체 또는 NSURLDownload
개체 대리자의 책임입니다. NSURLCredential
을 초기화합니다.
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
...
let cred = URLCredential(user: "foo", password: "bar", persistence: .none)
let trust = challenge.protectionSpace.serverTrust
let cred = URLCredential(trust:trust!)
...
}
NSURLConnection
개체, NSURLSession
개체 또는 NSURLDownload
개체 대리자의 책임입니다. 서버 신뢰를 평가하기 위해 SecTrustEvaluate(_:_:)
메서드는 서버의 NSURLProtectionSpace
개체의 serverTrust
메서드로부터 얻은 신뢰를 사용하여 호출되어야 합니다. SecTrustEvaluate(_:_:)
메서드는 두 개의 다른 값을 반환합니다.OSStatus
값은 결과 코드를 나타냅니다.cancel(_:)
로 인증 챌린지를 취소해야 합니다.
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
SecTrustResultType result = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &result);
completionHandler(NSURLSessionAuthChallengeUseCredential, [challenge proposedCredential]);
NSURLConnection
개체, NSURLSession
개체 또는 NSURLDownload
개체 대리자의 책임입니다. 서버 신뢰를 평가하기 위해 SecTrustEvaluate(_:_:)
메서드는 서버의 NSURLProtectionSpace
개체의 serverTrust
메서드로부터 얻은 신뢰를 사용하여 호출되어야 합니다. SecTrustEvaluate(_:_:)
메서드는 두 개의 다른 값을 반환합니다.OSStatus
값은 결과 코드를 나타냅니다.cancel(_:)
로 인증 챌린지를 취소해야 합니다.
let trust = challenge.protectionSpace.serverTrust
var result = SecTrustResultType.invalid
let status = SecTrustEvaluate(trust!,&secresult)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, challenge.proposedCredential)
NSURLConnection
대리자는 응용 프로그램이 특정 보호 공간에 대한 인증 챌린지를 처리하는 방법을 알고 있는지를 먼저 확인하지 않고 인증 챌린지를 처리합니다.NSURLProtectionSpace
개체는 서버 또는 서버의 영역(일반적으로 영역(realm)으로 불림)을 나타내며, 인증이 필요합니다.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
메서드는 인증을 수행해야 하는 NSURLConnectionDelegate.connection(_:didReceive:)
메서드를 호출하기 바로 전에 호출됩니다. 이렇게 하면 보호 공간에 대한 인증을 시도하기 전에 NSURLConnectionDelegate
가 보호 공간을 검사할 수 있습니다. true
를 반환함으로써 대리자는 인증 형식을 처리할 수 있음을 나타냅니다(인증 형식 처리는 connection(_:didReceive:)
에 대한 후속 호출을 통해 처리됨). 해당 대리자가 이 메서드를 구현하지 않고 보호 공간이 클라이언트 인증서 인증 또는 서버 신뢰 인증을 사용하는 경우 시스템은 사용자의 키 집합을 사용하여 인증하려고 시도하는데, 이것은 원하는 동작이 아닐 수 있습니다.NSURLConnection
대리자는 응용 프로그램이 특정 보호 공간에 대한 인증 챌린지를 처리하는 방법을 알고 있는지를 먼저 확인하지 않고 인증 챌린지를 처리합니다.NSURLProtectionSpace
개체는 서버 또는 서버의 영역(일반적으로 영역(realm)으로 불림)을 나타내며, 인증이 필요합니다.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
메서드는 인증을 수행해야 하는 NSURLConnectionDelegate.connection(_:didReceive:)
메서드를 호출하기 바로 전에 호출됩니다. 이렇게 하면 보호 공간에 대한 인증을 시도하기 전에 NSURLConnectionDelegate
가 보호 공간을 검사할 수 있습니다. true
를 반환함으로써 대리자는 인증 형식을 처리할 수 있음을 나타냅니다(인증 형식 처리는 connection(_:didReceive:)
에 대한 후속 호출을 통해 처리됨). 해당 대리자가 이 메서드를 구현하지 않고 보호 공간이 클라이언트 인증서 인증 또는 서버 신뢰 인증을 사용하는 경우 시스템은 사용자의 키 집합을 사용하여 인증하려고 시도하는데, 이것은 원하는 동작이 아닐 수 있습니다.NSURLConnection
또는 NSURLSession
에 대한 인증 처리 콜백이 어떤 호스트에 자격 증명을 보내는지 확인하지 못합니다.NSURLConnection
또는 NSURLSession
콜백을 구현하여 인증 요청을 처리합니다. 예상 호스트에서 인증 요청이 나오도록 확인하는 것을 잊어버리면 자격 증명은 응용 프로그램이 로드하는 모든 URL에 전송됩니다. 또한, 자격 증명이 안전하게 전송될 수 있음을 확인하지 못하면 자격 증명이 도난됩니다.
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NS URLAuthenticationChallenge *)challenge completionHandler:(void (^)(NS URLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
NSString *user = [self getUser];
NSString *pass = [self getPassword];
NSURLCredential *cred = [NSURLCredential credentialWithUser:user
password:pass persistence:NSURLCredentialPersistenceForSession];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
NSURLConnection
또는 NSURLSession
에 대한 인증 처리 콜백이 어떤 호스트에 자격 증명을 보내는지 확인하지 못합니다.NSURLConnection
또는 NSURLSession
콜백을 구현하여 인증 요청을 처리합니다. 예상 호스트에서 인증 요청이 나오도록 확인하는 것을 잊어버리면 자격 증명은 응용 프로그램이 로드하는 모든 URL에 전송됩니다. 또한, 자격 증명이 안전하게 전송될 수 있음을 확인하지 못하면 자격 증명이 도난됩니다.
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
let user = getUser()
let pass = getPassword()
let credential = URLCredential(user: user, password: pass, persistence: .none)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, credential)
}
tx.origin
전역 변수를 사용합니다.tx.origin
전역 변수에는 트랜잭션이 시작되는 계좌의 주소가 저장됩니다.tx.origin
에 포함됩니다. tx.origin
을 A1 승인 확인에 사용하는 경우 해당 인증이 우회됩니다.tx.origin
을 통해 사용자 인증이 진행되는 취약한 계약을 호출하는 계약)으로 트랜잭션을 전송하도록 사용자를 속일 수 있다면 트랜잭션이 시작된 사용자 계좌의 주소가 tx.origin
에 저장되며 인증은 우회됩니다.tx.origin
과 동일해야 제공된 주소로 자금이 이체됩니다.sendTo
함수를 즉시 호출하는 악의적인 계약으로 트랜잭션을 전송하도록 계약 소유자를 속일 수 있으면 require
문 내의 조건이 true가 되며, 그러면 sendTo
호출 시에 공격자 계약에서 지정한 어떤 주소로든 자금이 이체됩니다.
function sendTo(address receiver, uint amount) public {
require(tx.origin == owner);
receiver.transfer(amount);
}
22
를 전 세계에 공개(0.0.0.0/0
)하는 AWS 보안 그룹을 정의합니다.
- name: Task to open SSH port
amazon.aws.ec2_group:
name: demo_security_group
description: Open the ssh port to the world
state: present
vpc_id: 123456
region: us-west-1
rules:
- proto: tcp
ports: 22
cidr_ip: 0.0.0.0/0
- name: Create Lambda policy statement for S3 event notification
community.aws.lambda_policy:
action: lambda:InvokeFunction
function_name: functionName
principal: *
statement_id: lambda-s3-demobucket-access-log
source_arn: arn:aws:s3:us-west-2:123456789012:demobucket
source_account: 123456789012
state: present