Compile-time detection of machine image sniping
Martin Kellogg
University of Washington
1
Compile-time detection of machine image sniping Martin Kellogg - - PowerPoint PPT Presentation
Compile-time detection of machine image sniping Martin Kellogg University of Washington 1 What is a machine image? cloud computer 2 What is a machine image? What software to run? cloud computer 3 What is a machine image? What software
University of Washington
1
2
cloud computer
3
cloud computer
What software to run?
4
cloud computer
What software to run?
“machine image”
5
cloud computer
What software to run? This software!
“machine image”
aws ec2 describe-images --imageIds ami-5731123e
6
aws ec2 describe-images --imageIds ami-5731123e
7
aws ec2 describe-images --imageIds ami-5731123e
8
aws ec2 describe-images --imageIds ami-5731123e
9
10
11
DescribeImagesRequest request = new DescribeImagesRequest(); request.withFilters(new Filter("name", "RHEL-7.5_HVM_GA")); api.describeImages(request);
12
DescribeImagesRequest request = new DescribeImagesRequest(); request.withFilters(new Filter("name", "RHEL-7.5_HVM_GA")); api.describeImages(request);
13
DescribeImagesRequest request = new DescribeImagesRequest(); request.withFilters(new Filter("name", "RHEL-7.5_HVM_GA")); api.describeImages(request);
14
DescribeImagesRequest request = new DescribeImagesRequest(); request.withFilters(new Filter("name", "RHEL-7.5_HVM_GA")); api.describeImages(request);
15
DescribeImagesRequest request = new DescribeImagesRequest(); request.withFilters(new Filter("name", "RHEL-7.5_HVM_GA")); request.withOwners(“myOrg”); api.describeImages(request);
16
17
18
19
withImageIds() withOwners()
20
21
22
DescribeImageResponse describeImages( @CalledMethods("withImageIds || withOwners") DescribeImageRequest request) { … }
23
24
@CalledMethods({}) Object @CalledMethods({“foo”}) Object @CalledMethods({“foo”, “bar”}) Object
25
public List<Image> describeImages(String... imageIds) { DescribeImagesRequest request = new DescribeImagesRequest(); if (imageIds != null) { request.setImageIds(Arrays.asList(imageIds)); } DescribeImagesResult result = ec2client.describeImages(request); return result.getImages(); }
26
27
28
29
30
31
○ those vulnerabilities exist in practice, and ○ we can find them!
32
33
34
@Builder public class UserIdentity { private final @NonNull String name; private final @NonNull String displayName; private final @NonNull ByteArray id; }
35
UserIdentity identity = UserIdentity.builder() .name(username) .displayName(displayName) .id(generateRandom(32)) .build();
36
UserIdentity identity = UserIdentity.builder() .name(username) .displayName(displayName) .id(generateRandom(32)) .build();
37
UserIdentity identity = UserIdentity.builder() .name(username) //.displayName(displayName) .id(generateRandom(32)) .build();
38
UserIdentity identity = UserIdentity.builder() .name(username) //.displayName(displayName) .id(generateRandom(32)) .build();
39
40
41