Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์ฝ๋ ๋ฐ ์ถ๊ฐ ์ ๋ณด๋ https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence์์ ํ์ธํ ์ ์์ต๋๋ค.
iOS ๊ฐ๋ฐ์์์ ๊ฐ์ฒด ์ง๋ ฌํ
iOS์์ ๊ฐ์ฒด ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์ ์ฅํ๊ฑฐ๋ ์ ์กํ ์ ์๋ ํ์์ผ๋ก ๋ณํํ ๋ค์, ํ์ํ ๋ ์ด ํ์์์ ๋ค์ ์ฌ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ํฌํจํฉ๋๋ค. ๋ ๊ฐ์ง ์ฃผ์ ํ๋กํ ์ฝ์ธ **NSCoding**๊ณผ **NSSecureCoding**์ Objective-C ๋๋ NSObject ์๋ธํด๋์ค์ ๋ํด ์ด ๊ณผ์ ์ ์ฉ์ดํ๊ฒ ํ์ฌ ๊ฐ์ฒด๋ฅผ **NSData**๋ก ์ง๋ ฌํํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ๋ฐ์ดํธ ๋ฒํผ๋ฅผ ๊ฐ์ธ๋ ํ์์
๋๋ค.
NSCoding ๊ตฌํ
NSCoding์ ๊ตฌํํ๋ ค๋ฉด ํด๋์ค๊ฐ NSObject์์ ์์๋ฐ๊ฑฐ๋ @objc๋ก ํ์๋์ด์ผ ํฉ๋๋ค. ์ด ํ๋กํ ์ฝ์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ธ์ฝ๋ฉํ๊ณ ๋์ฝ๋ฉํ๊ธฐ ์ํ ๋ ๊ฐ์ง ๋ฉ์๋์ ๊ตฌํ์ ์๊ตฌํฉ๋๋ค:
class CustomPoint: NSObject, NSCoding {
var x: Double = 0.0
var name: String = ""
func encode(with aCoder: NSCoder) {
aCoder.encode(x, forKey: "x")
aCoder.encode(name, forKey: "name")
}
required convenience init?(coder aDecoder: NSCoder) {
guard let name = aDecoder.decodeObject(forKey: "name") as? String else { return nil }
self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name)
}
}
NSSecureCoding๋ก ๋ณด์ ๊ฐํํ๊ธฐ
๊ณต๊ฒฉ์๊ฐ ์ด๋ฏธ ๊ตฌ์ฑ๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์
ํ๋ ์ทจ์ฝ์ ์ ์ํํ๊ธฐ ์ํด, **NSSecureCoding**์ ํฅ์๋ ํ๋กํ ์ฝ์ ์ ๊ณตํฉ๋๋ค. NSSecureCoding์ ์ค์ํ๋ ํด๋์ค๋ ๋์ฝ๋ฉ ์ค ๊ฐ์ฒด์ ์ ํ์ ํ์ธํด์ผ ํ๋ฉฐ, ์์๋๋ ๊ฐ์ฒด ์ ํ๋ง ์ธ์คํด์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ NSSecureCoding์ด ์ ํ ์์ ์ฑ์ ํฅ์์ํค๋ ๋์, ๋ฐ์ดํฐ ์ํธํ๋ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ์ง ์์ผ๋ฏ๋ก, ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค:
static var supportsSecureCoding: Bool {
return true
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
Data Archiving with NSKeyedArchiver
NSKeyedArchiver์ ๊ทธ์ ์์ํ๋ NSKeyedUnarchiver๋ ๊ฐ์ฒด๋ฅผ ํ์ผ๋ก ์ธ์ฝ๋ฉํ๊ณ ๋์ค์ ์ด๋ฅผ ๊ฒ์ํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ๊ฐ์ฒด๋ฅผ ์ง์์ ์ผ๋ก ์ ์ฅํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค:
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
Using Codable for Simplified Serialization
Swift์ Codable ํ๋กํ ์ฝ์ Decodable๊ณผ Encodable์ ๊ฒฐํฉํ์ฌ String, Int, Double ๋ฑ๊ณผ ๊ฐ์ ๊ฐ์ฒด์ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ์ ์ถ๊ฐ์ ์ธ ๋
ธ๋ ฅ ์์ด ์ฉ์ดํ๊ฒ ํฉ๋๋ค:
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
์ด ์ ๊ทผ ๋ฐฉ์์ ์์ฑ ๋ชฉ๋ก ๋ฐ JSON ๊ฐ์ ๊ฐ๋จํ ์ง๋ ฌํ๋ฅผ ์ง์ํ์ฌ Swift ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํฅ์์ํต๋๋ค.
JSON ๋ฐ XML ์ธ์ฝ๋ฉ ๋์
๋ค์ดํฐ๋ธ ์ง์ ์ธ์๋ ์ฌ๋ฌ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ JSON ๋ฐ XML ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณ ์ ํ ์ฑ๋ฅ ํน์ฑ๊ณผ ๋ณด์ ๊ณ ๋ ค ์ฌํญ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์คํ๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ฉฐ, ํนํ ์ธ๋ถ ์ํฐํฐ ์ฒ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ์๋ฅผ ๊ตฌ์ฑํ์ฌ XXE (XML ์ธ๋ถ ์ํฐํฐ) ๊ณต๊ฒฉ๊ณผ ๊ฐ์ ์ทจ์ฝ์ ์ ์ํํด์ผ ํฉ๋๋ค.
๋ณด์ ๊ณ ๋ ค ์ฌํญ
๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ ๋, ํนํ ํ์ผ ์์คํ ์ผ๋ก ์ง๋ ฌํํ ๋๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฐ๋ฅ์ฑ์ ๋ํด ๊ฒฝ๊ณํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ ๊ฐ๋ก์ฑ์ด๊ฑฐ๋ ๋ถ์ ์ ํ๊ฒ ์ฒ๋ฆฌ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌด๋จ ์์ ์ด๋ ๋ฐ์ดํฐ ์ ์ถ๊ณผ ๊ฐ์ ์ํ์ ๋ ธ์ถ์ํฌ ์ ์์ต๋๋ค. ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ณ ์๋ช ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ฌธํ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


