I am thinking of the least resource expensive way to implement cover and concealment behaviour in an AI.
Adding data to a huge number of objects in a 20km x 20km map could have a real performance decrease if you have it on trees, bushes of concealment, houses, rocks etc etc.
The thing is this is not Unity or UE4 with a massive community..
The way I have in mind would be:
AI goes in to alert mode, finds concave navmesh (knows that there is an object) in its immediate vicinity (say 20 meters), ray cast to find height of said objects that has cause the navmesh to go around the objects to see what stance it needs to preform to stay in cover.
Another implementation would be to find the best path to set way points to flank the player.
Closer the objects the more concealment you have and finding this via the namesh rather than having a load of preset boxes telling them that there is cover there.
If in alert state and not combat state then find concealment (this is the tricky part that does not involve the navmesh and not really relevant to this topic.
The most of the information is already there with the navmesh data and as stated by SF above you will have to use raycasts to find the height etc, these two usually go hand in hand when creating a cover based AI system.
I have already put behaviour trees together for ammo collection via the lowest priority member in a squad that will go to a supply point and fill the back pack up with ammo and bandages for his/her squad mates..

the setting way points was the easiest part of the system but finding cover as he/she goes to resupply is the problem and finding the least resource expensive way of doing so, its like reinventing the wheel when most of the data is already there. lol..
I have more ideas like AI creating ambush points and more. creating there own squads if in alert mode and others are close by in alert mode.
Ai puts other AI in alert mode that are close to them and not in alert mode.
This is a great resource