티스토리 뷰

정보보안/Mobile

[iOS]JSON Injection

실더 2016. 5. 23. 15:38

JSON Injectio


JSON(JavaScript Object Notation,제이속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.  JavaScript의 구문 형식을 따르지만, 프로그래밍 언어나 플랫폼에 독립적으로 C, C++, 자바, JavaScript, 펄, 파이썬 등 많은 언어에서 이용할 수 있다. 

주로 다음과 같은 상황에서 공격이 발생 될 수 있다. 

1. 신뢰할 수 없는 소스에서 데이터가 프로그램에 입력됩니다.
2. JSON 스트림에 데이터가 작성됩니다.

JSON 문서와 메시지의 의미는 응용 프로그램이 확인되지 않은 입력에서 JSON을 구성하는 경우 변경될 수 있다. 상대적으로 양호한 경우 공격자는 JSON 문서 또는 요청을 구문 분석하는 동안 응용 프로그램이 예외 사항을 발생시키도록 하는 관련 없는 요소를 삽입할 수도 있다. 좀 더 심각한 경우 JSON injection과 같이 공격자는 JSON 문서 또는 요청 내에서 주요 비즈니스 값의 예측 가능한 조작을 허용하는 관련 없는 요소를 삽입할 수도 있다. JSON injection이 Cross-Site Scripting 또는 Dynamic Code Evaluation을 유발하는 경우도 있다.

[대응책]

1. 확인 되지 않은 사용자 입력의 경우 유효성 체크 로직을 구현한다. 

2.JSON 의 안전한 직렬화 함수를 이용하여 데이터를 취급한다.

아래는 그에 대한 예시 코드입니다.

 

NSError *error = nil;

NSString *responses = @"";

 NSDictionary *itemDic [NSJSONSerialization JSONObjectWithData:(전달 받으려는 데이터) options:kNilOptions error:&error];

    

    if ([NSJSONSerialization isValidJSONObject:itemDic]) {

        NSData *jsonData =[NSJSONSerialization dataWithJSONObject:itemDic options:NSJSONWritingPrettyPrinted error:&error];

        if (jsonData != nil && error == nil) {

            responses = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];

        }

    }

[출처] 

http://www.hpenterprisesecurity.com/vulncat/ko/vulncat/index.html - 공격 예시